ich ein Beispiel gemacht, um besser die Situation zu erklären:Oracle-Cursor wird nicht aktualisiert Daten
Ich habe zwei Tabellen
CREATE TABLE AA
(
ID NUMBER NOT NULL PRIMARY KEY,
REFERENCE NVARCHAR2(100) NULL
)
CREATE TABLE BB
(
ID NUMBER NOT NULL PRIMARY KEY,
IDA NUMBER NOT NULL,
REFERENCE NVARCHAR2(100) NULL,
FOREIGN KEY (IDA) REFERENCES AA(ID)
)
und einige Datensätze
INSERT INTO AA VALUES(1, NULL)
INSERT INTO AA VALUES(2, NULL)
INSERT INTO AA VALUES(3, NULL)
INSERT INTO AA VALUES(4, NULL)
INSERT INTO AA VALUES(5, NULL)
INSERT INTO BB VALUES(6, 1, 'AAA')
INSERT INTO BB VALUES(7, 2, 'BBB')
INSERT INTO BB VALUES(8, 3, 'CCC')
I REFERENCE
Feld gesetzt haben von AA
mit dem Wert, der in BB
von IDA
ist.
Also beschloss ich, einen Cursor es
DECLARE
idA NUMBER;
reference NVARCHAR2(100);
CURSOR ref_cursor
IS
SELECT IDA, REFERENCE FROM BB;
BEGIN
OPEN ref_cursor;
LOOP
FETCH ref_cursor into idA, reference;
EXIT WHEN ref_cursor%NOTFOUND;
UPDATE AA
SET REFERENCE = reference
WHERE ID = idA;
DBMS_OUTPUT.put_line('reference of movement ' || idA || ' updated with ' || reference);
END LOOP;
CLOSE ref_cursor;
END;
Durch die Ausführung zu verwenden, ich
reference of movement 1 updated with AAA
reference of movement 2 updated with BBB
reference of movement 3 updated with CCC
Das ist genau eine Ausgabe bekommen, was ich will, aber wenn ich die Daten von Check-Sterne-Auswahl der Tabelle Ich fand die REFERENCE
Spalte noch NULL
.
So fand ich diesen anderen Cursor
DECLARE
CURSOR ref_cursor
IS
SELECT IDA, REFERENCE FROM BB;
BEGIN
FOR ref_c IN ref_cursor
LOOP
UPDATE AA SET REFERENCE = ref_c.REFERENCE WHERE ID = ref_c.IDA;
END LOOP;
END;
Dieses das Update tatsächlich tut. Warum sind diese 2 Cursor unterschiedlich?
Können Sie Ihre lokale Variablenreferenz auf einen anderen Namen (in Ihrem ersten Cursorbeispiel) ändern und es erneut versuchen? – cableload
[Verwandte Fragen] (http://StackOverflow.com/q/18875833/266304), nicht sicher, ob es nahe genug ist, um ein Duplikat zu sein, aber es ist das gleiche Namensauflösungsproblem. [Wie ist das] (http://stackoverflow.com/a/25574647/266304). –
Es gibt keine Festschreibung. –