Announcement

Collapse
No announcement yet.

Update befehl fehler Meldung ungültiger bezeichner

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

  • Update befehl fehler Meldung ungültiger bezeichner

    Hallo,
    ich hab ein Problem und verzweifle fast und bin mir sicher Ihr könnt mir helfen.

    Bei dieser Abfrage:

    Update (select * from t137artk b, eidt_test a where b.kdnr=11330 and b.objnr=33 and b.arnrv=a.arnr) set b.eipr=a.vkpr

    bekomme ich die fehlermeldung:

    ORA-00904:"A"."VKPR": ungültiger Bezeichner

    Danke schon mal

  • #2
    Originally posted by ulio View Post
    Hallo,
    ich hab ein Problem und verzweifle fast und bin mir sicher Ihr könnt mir helfen.

    Bei dieser Abfrage:

    Update (select * from t137artk b, eidt_test a where b.kdnr=11330 and b.objnr=33 and b.arnrv=a.arnr) set b.eipr=a.vkpr

    bekomme ich die fehlermeldung:

    ORA-00904:"A"."VKPR": ungültiger Bezeichner

    Danke schon mal
    Das ist auch Bullshit, was Du da machst. Nach dem Update-Befehl wird ein Tabellenname erwartet, du präsentierst eine Abfrage mit (vermutlich) vielen Spalten und Zeilen.


    Andreas

    Comment


    • #3
      Ohne jemals ernsthaft etwas mit Oracle gemacht zu haben, gemäß diesem Link könnte es so gehen:

      [highlight=sql]
      Update (select b.eipr, a.vkpr from t137artk b, eidt_test a where b.kdnr=11330 and b.objnr=33 and b.arnrv=a.arnr) set eipr=vkpr
      [/highlight]

      Die Aliasnamen (a und b) werden nicht nach außen (außerhalb der Klammern) geführt.

      Viel Erfolg
      Tino
      Ich habs gleich!
      ... sagte der Programmierer.

      Comment


      • #4
        Originally posted by tinof View Post
        Ohne jemals ernsthaft etwas mit Oracle gemacht zu haben, gemäß diesem Link könnte es so gehen
        Nicht mal Ansatzweise. Ich brauche eine Tabelle oder View, Nested Table oder VArray welches ich updaten kann. Eine Ergebnismenge kann ich nicht updaten. Wäre auch nicht sonderlich sinnvoll.

        So solle es eher laufen:
        Code:
        Update t137artk b set b.eipr=(select a.vkpr from eidt_test a where b.arnrv=a.arnr) where b.kdnr=11330 and b.objnr=33
        Voraussetzung ist, dass der Join keine doppelte Treffer liefert.
        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
          Nicht mal Ansatzweise.
          Nur interessehalber - wie sähe denn die Syntax aus, wenn ich gemäß der verlinkten Beschreibung subquery1 verwenden würde?

          Danke,
          Tino
          Ich habs gleich!
          ... sagte der Programmierer.

          Comment


          • #6
            An all die "schlauen WC Benutzer" hier:
            Ein Update Statement der Form
            Code:
            UPDATE (SELECT ... FROM ...) SET ... = ...
            ist zwar nicht so alltäglich, kann jedoch ohne Probleme verwendet werden - zumindest bei Oracle.

            Das SELECT muss natürlich gewisse Bedingungen erfüllen, aber grundsätzlich geht es.

            Gruss

            Comment


            • #7
              ist zwar nicht so alltäglich, kann jedoch ohne Probleme verwendet werden - zumindest bei Oracle.

              ... und jetzt fehlt noch ein sinnvolles Beispiel das zeigt das das auch hilfreich ist.

              Comment


              • #8
                Originally posted by Wernfried View Post
                Ein Update Statement der Form
                Code:
                UPDATE (SELECT ... FROM ...) SET ... = ...
                ist zwar nicht so alltäglich, kann jedoch ohne Probleme verwendet werden - zumindest bei Oracle.
                Das SELECT muss natürlich gewisse Bedingungen erfüllen, aber grundsätzlich geht es.
                Gruss
                Hmm stimmt. Die Tabellen müssen allerdings in einer PK-FK Beziehung stehen. Um die Klammer herum brauchts dann noch einen Alias.
                Bisher hab ich das aber immer als korrelierte Subquery geschrieben, hier sind die Einschränkungen nicht gegeben.
                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


                • #9
                  Originally posted by Ralf Jansen View Post
                  ... und jetzt fehlt noch ein sinnvolles Beispiel das zeigt das das auch hilfreich ist.
                  Kann ich liefern:
                  [HIGHLIGHT=sql]
                  UPDATE
                  (SELECT /*+ USE_HASH(a b) */ AAL2_PATH_VCC_TP_LIST, FULL_DISTINCT_NAME
                  FROM WT_A2_PATH_DIST_UNIT a
                  WHERE AAL2_PATH_VCC_TP_LIST IS NULL
                  AND FULL_DISTINCT_NAME =ANY (SELECT FULL_DISTINCT_NAME FROM FT_A2PDU_AAL2_PATH_VCC_TP_LIST b)
                  ) wt
                  SET (AAL2_PATH_VCC_TP_LIST) =
                  (WITH t AS (
                  SELECT m.FULL_DISTINCT_NAME,
                  CAST(MULTISET(
                  SELECT AAL2_PATH_VCC_TP_LIST
                  FROM FT_A2PDU_AAL2_PATH_VCC_TP_LIST nt
                  WHERE nt.FULL_DISTINCT_NAME = m.FULL_DISTINCT_NAME)
                  AS FDN_TABLE_TYPE) AS MO_REF
                  FROM WT_A2_PATH_DIST_UNIT m
                  GROUP BY FULL_DISTINCT_NAME)
                  SELECT MO_REF
                  FROM t
                  WHERE t.FULL_DISTINCT_NAME = wt.FULL_DISTINCT_NAME)
                  [/HIGHLIGHT]

                  Das Statement wird dynamisch erzeugt und dient dazu eine Tabelle mit einer Objekt-Typ Spalte upzudaten. Die Daten kommen aus einer anderen Tabelle (FT_A2PDU_AAL2_PATH_VCC_TP_LIST, welche anschliessend gelöscht wird) wo sie als "simple" Werte abgespeichert sind. Kann sein, dass es für dieses eine Statement auch anders geht, aber der Objekt-Typ kann auch aus mehreren Spalten bestehen und da es ca. 30 verschiedene Updates sind werden die Statements dynamisch erzeugt.

                  Den Hint verwendet ich weil die Tabelle fast immer leer ist. Sie werden einmal in der Nacht befüllt, upgedated, ins Applikations-Schema kopiert und wieder gelöscht. In den Statistiken steht deshalb nur eine leere Tabelle und der Optimizer würde ein Nested-Loop Join machen obwohl die Tabellen sehr gross sind.

                  Gruss

                  Comment


                  • #10
                    Originally posted by Wernfried View Post
                    Kann ich liefern:

                    Gruss

                    Nice.


                    Andreas

                    Comment

                    Working...
                    X