Oracle-Update-Abfrage, fehlende SET-Schlüsselwort - ORA97100 & ORA-00904

Im immer eine verwirrend "ORA97100 fehlende SET-Schlüsselwort" Fehler beim ausführen dieses einfache UPDATE-Anweisung, obwohl Sie die "set" - Schlüsselwort gibt es:

UPDATE CURRENT_LOAD as ac
SET ac.LOAD_START_TIMESTAMP = CURRENT_TIMESTAMP
WHERE ac.LOAD_START_TIMESTAMP IS NULL;

Ich habe auch versucht, das gibt "ungültige Bezeichner ORA-00904 AC.LOAD_START_TIMESTAMP"

UPDATE CURRENT_LOAD ac
SET ac.load_start_timestamp = CURRENT_TIMESTAMP
WHERE ac.load_start_timestamp IS NULL;

Ich weiter versucht werden, das gibt wieder "Ungültiger Bezeichner ORA-00904 CURRENT_LOAD.LOAD_START_TIMESTAMP"

UPDATE CURRENT_LOAD 
SET CURRENT_LOAD.load_start_timestamp = CURRENT_TIMESTAMP
WHERE CURRENT_LOAD.load_start_timestamp IS NULL;

Dies ist wirklich merkwürdig, da das Attribut "LOAD_START_TIMESTAMP" ist tatsächlich definiert, die in meiner Tabelle , siehe die "CURRENT_LOAD" table-DDL-unten:

 CREATE TABLE "CURRENT_LOAD"
   (
  "LOAD_START_TIMESTAMP" TIMESTAMP with TIME ZONE, 
    "CONTRACT_NO" VARCHAR2(100 BYTE), 
    "PROJECT_DEFINITION" VARCHAR2(100 BYTE), 
    "MASTER_CONTRACT_NO" VARCHAR2(100 BYTE), 
    "Sac_CONTRACT_NO" VARCHAR2(100 BYTE)
);

Jede gut durchdachte beraten wird sehr geschätzt.

Dank

  • In der letzten version Ihnen fehlt ein Punkt zwischen der Tabellen-und Spaltennamen in der where-Klausel. CURRENT_LOADload_start_timestamp -> CURRENT_LOAD.load_start_timestamp Ändern und es sollte funktionieren. Auch sollten Sie nicht brauchen, um specfiy den Ballen Namen in das set und where-Klauseln. Siehe sqlfiddle.com/#!4/2607c/1
  • das anfängliche problem war die Verwendung von AS vor der Tabelle ein alias - dies ist nicht erlaubt. Zweitens - wenn Sie eine ORA-00904, wenn Sie versuchen, um Zugriff LOAD_START_TIMESTAMP, und der Spalte mit, dass die genauen Namen, dann erscheint Sie nicht die entsprechenden Berechtigungen, um diese Spalte. Sie müssen reden, um den DBA zu sehen, wenn Sie eine mehr detaillierte Erklärung dieser. Viel Glück.
  • Die zweite und die Dritte Abfrage (nun, Sie haben korrigiert, fehlende Periode) sind syntaktisch gültig. Sehen Sie diese SQL Fiddle: sqlfiddle.com/#!4/7527c/3 Wenn Sie bekommen eine Fehlermeldung, etwas über die Abfrage, die Sie tatsächlich ausführen (oder die Tabelle, die Sie tatsächlich ausgeführt werden) unterscheidet sich von der Tabelle und der Abfrage, die Sie hier gepostet. Die Tatsache, dass Sie mit groß-und Kleinschreibung von Bezeichnern lässt mich vermuten, dass in Ihrem code Sie haben versehentlich erstellt ein case-sensitive Bezeichner, die Sie versuchen zu Referenz in Ihrer UPDATE ohne umschließenden es in doppelte Anführungszeichen.
InformationsquelleAutor cyber101 | 2014-11-20
Schreibe einen Kommentar