Announcement

Collapse
No announcement yet.

Tabelle mit 1 Spalte ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabelle mit 1 Spalte ändern

    Hallo!
    Ich bin neu hier und habe gleich ein etwas ungewöhnliches Problem:
    Ich habe eine Tabelle mit nur einer Spalte und 10 Werten und muss diese Werte in einer Stored Procedure ändern.
    Dazu muss ich mir aber zuerst die alten Werte abspeichern, aber ich habe keine Ahnung wie...

    Bislang sieht mein Versuch so aus:

    ...
    DECLARE
    oldvals real[];
    BEGIN

    --hier alte Werte in oldval speichern

    UPDATE t_Table1 SET Val1=newVal1 WHERE Val1=oldvals[1]
    ...

    Val1..10 werden übergeben.

    Wie bekomme ich die Werte in oldvals?
    Ist mein Ansatz ev. komplett falsch und wenn ja, wie kan ich das Problem lösen?
    Danke schonmal für jede Hilfe!

  • #2
    Dazu muss ich mir aber zuerst die alten Werte abspeichern
    Wieso? Und was genau möchtest Du ändern? Alle? nur einzelne?

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Das Warum ist eine ganz andere Geschichte.
      Manschmal muss ich einzelne Werte ändern, manchmal aber auch alle.
      Die Tabelle komplett löschen und neu aufbauen funktioniert aber leider nicht wirklich gut. Habe ich schon probiert und gab manchmal datenkonsistenzprobleme. Daher möchte ich diese Lösung nicht weiter verfolgen.
      Ich suche also eigendlich nur nach einer Möglichkeit, die werte der Spalte intern in der Stored Procedue (in einem Array?) abzuspeichern.

      Comment


      • #4
        Ich versteh nur nicht, warum Du denkst irgendwas abspeichern zu müssen. Du hast die Werte doch zur Verfügung. Wenn Du das noch erläuterst, finden wir vielleicht einen Denkfehler und können das Problem lösen.

        Übrigends stimmt die Syntax von dir nicht ganz:
        Code:
        UPDATE t_Table1 SET Val1=newVal1 WHERE Val1=oldvals[1]
        Es muss heißen:
        Code:
        UPDATE tablle SET spalteX=wert where spalteY=wert AND spalteZ=wert


        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Also ich habe eine Tabelle
          Tabellenname
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10

          1..10 sind natürlich nur Beispielwerte, normalerweise stehen reals drinnen.
          Nun brauche ich eine stored procedure (und ich brauche die wirklich, aus Gründen die hier zu lange bräuchten darzulegen) der ich 10 neue Werte übergebe und die die Werte in der Tabelle austauschen soll. Ohne die Tabelle zu löschen und neu aufzubauen denn das macht Probleme.

          also UpdateVals(1.5, 2.4, 3.6, 4.7, 5.6, 6.5, 7.4, 7.9, 9.2, 10.1)
          =>
          Tabellenname
          1.5
          2.4
          3.6
          4.7
          5.6
          6.5
          7.4
          7.9
          9.2
          10.1

          Comment


          • #6
            Ok. Das Problem das ich hier sehe ist, wie Du die Zuordnung der Werte bewerkstelligen möchtest. es gibt ja in einer Tabelle keinen Anfang oder ein Ende sondern nur eine Sortierreihenfolge der Ausgabe.

            Wie möchtest Du also, wie in deinem Beispiel, erreichen, dass der erste Parameter auch den richtigen Wert überschreibt? Überschreibt immer der kleinste den kleinesten, der nächst größere das entsprechende Pendant in der Tabelle usw.?

            Am einfachsten wäre es natürlich, Du fügst eine weitere Spalte ein, mit deren Hilfe Du die Werte eindeutig identifizieren kannst.

            Dim
            Zitat Tom Kyte:
            I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

            Comment


            • #7
              Die Sortierung ist unwichtig. Wird ja beim Auslesen der Größe nach sortiert und so verwendet (Als Y-Achse eines speziellen Diagramms). Es müssen nur 10 voneinander verschiedene Werte (zwischen 0 und 50) drinnenstehen.
              An der Tabelle selbst kann ich aber nix ändern, da sie Teil eines größeren Projektes ist und auch an anderen Stellen verwendet wird. Daher geht das mit dem Löschen und neu erstellen auch nicht.

              Comment


              • #8
                Nun in dem Fall würd ich einfach einen Updateable Cursor verwenden und dann die übergebenen Werte jeweils setzen.

                Dim
                Zitat Tom Kyte:
                I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                Comment

                Working...
                X