Announcement

Collapse
No announcement yet.

Problem mit Update-Statement (ORA-00936-Error)

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

  • Problem mit Update-Statement (ORA-00936-Error)

    Hallo Zusammen

    Ich habe ein kleines Problem mit einem Update-Statement. Vielleicht kann mir jemand helfen.

    Ich habe zwei Tabellen:

    ACCOUNT und ASSIGN

    Dabei gibt es unter anderem folgende Attribute:

    ACCOUNT.COMPANYFK
    ACCOUNT.ASSIGNFK
    ACCOUNT.ACCOUNTTYPE

    ASSIGN.ID
    ASSIGN.COMPANYFK
    ASSIGN.NAME

    Es gibt nun eine ForeignKey-Verbindung von ACCOUNT zu ASSIGN über das Attribut ACCOUNT.ASSIGNFK

    Um eine grosse Menge an Daten aufzubereiten, wünscht ein Kunde, dass diese Zuweisung einmalig via DB erfolgt. Ich benötige also ein Update-Script mit folgendem Ziel:

    Jedem ACCOUNT-Record mit ACCOUNTTYPE = 1 soll die ID von ASSIGN in ACCOUNT.ASSIGNFK zugefügt werden. Dabei soll der COMPANYFK in ACCOUNT gleich dem COMPANYFK in ASSIGN sein und zusätzlich nur jene ASSIGN genommen werden, welche in NAME das Wort ‚%POOL’ haben (da es pro COMPANYFK mehrere ASSIGN-Records gibt, aber nur einer mit dem NAME ‚%POOL’)

    Ich habe mal so ein Statement kreiert, aber ich bekomme den Fehler ORA-00936: Ausdruck fehlt. Was mache ich da falsch?

    update ACCOUNT
    set ACCOUNT.ASSIGNFK =
    (select (ID) from ASSIGN
    where ASSIGN.NAME like '%POOL' and
    where ASSIGN.COMPANYFK = ACCOUNT.COMPANYFK)
    where ACCOUNT.COMPANYFK =
    (select distinct(COMPANYFK) from ASSIGN
    where ASSIGN.COMPANYFK = ACCOUNT.COMPANYFK)
    where ACCOUNTTYPE = 1


    Hat jemand eine Idee? Kann auch ein anderer Ansatz sein, muss nicht mit diesem Statement sein…

    Vielen Dank
    mfg
    Andrea

  • #2
    Hallo Andrea, ORA-00936 = dein Sql Statement ist nicht korrekt. Das Problem liegt in "AND WHERE .. = ". Nehme das "WHERE" nach dem "AND" heraus.

    select (ID) from ASSIGN
    where ASSIGN.NAME like '%POOL' and
    ASSIGN.COMPANYFK = ACCOUNT.COMPANYFK)

    Gruß Matthias

    Comment


    • #3
      UPDATE ACCOUNT
      SET ACCOUNT.ASSIGNFK = ( SELECT (ID)
      FROM ASSIGN
      WHERE ASSIGN.NAME like '%POOL'
      AND WHERE ASSIGN.COMPANYFK = ACCOUNT.COMPANYFK
      )
      WHERE ACCOUNT.COMPANYFK = ( SELECT DISTINCT(COMPANYFK)
      FROM ASSIGN
      WHERE ASSIGN.COMPANYFK = ACCOUNT.COMPANYFK
      )
      WHERE ACCOUNTTYPE = 1

      oben sind zwei WHERE zuviel. So sollte es gehen:

      UPDATE ACCOUNT a
      SET ASSIGNFK = ( SELECT ID
      FROM ASSIGN s
      WHERE s.COMPANYFK = a.COMPANYFK
      AND NAME LIKE "%POOL"
      )
      WHERE ACCOUNTTYPE = 1

      Comment


      • #4
        ...perfekt, hat geklappt...

        Ich danke euch!

        Gruss
        Andrea

        Comment

        Working...
        X