Oracle-Pl/SQL-Prozedur zum aktualisieren von Werten von einer Tabelle in eine andere
Meine Anforderung ist hier, ich habe zwei Tabellen mit zwei Parametern.Ich habe geschrieben eine Prozedur die Werte(sor_ID) aus Tabelle1 und aktualisieren es in Tabelle 2 basierend auf dem Primärschlüssel.
Table 1
-------
Primary Key | Sor_ID
AAA | 100
BBB | 200
Table 2
-----
Foreign Key | Sor_ID
AAA | NULL
BBB | NULL
create or replace
Procedure UPDDATE_SORID_2
IS
s_id VARCHAR2(256 byte);
CURSOR C1 IS
SELECT A.SOR_INSTRMNT_ID
FROM TEST_TABLE B,TEMP_SOR_ID A
where A.INSTRMNT_KEY=B.INSTRMNT_KEY;
BEGIN
open c1;
loop
fetch c1 into s_id;
update TEST_TABLE set SOR_INSTRMNT_ID=S_ID;
commit;
end LOOP;
close c1;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001,'An error was encountered - '
||SQLCODE||' -ERROR'||SQLERRM);
end;
Diese Prozedur gibt nichts aktualisiert, auch nach Stunden läuft es. Freundlich darauf hin
- WENN ANDERE exception-Behandlung scheint überflüssig zu sein. Lass einfach die Ausnahme ausgelöst werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bemerkte ich ein paar Probleme mit Ihr Verfahren.
1) Es läuft immer, weil es keine AUSFAHRT aus der Schleife.
2) update-Anweisung aktualisiert die ganze Tabelle zu jeder Zeit, weil Sie nicht mit einer WHERE-Klausel.
Ich empfehle, Sie ändern sich wie folgt:
Brauchen Sie nicht Cursor, dies zu tun.
Wenn Sie eine foreign key-Beziehung zwischen den Tabellen können Sie aktualisieren Sie auf eine key-preserved Blick auf die beiden Tabellen verknüpft.
Dem Allgemeinen Muster wäre:
Diese werden schneller und robuster als eine PL/SQL-cursor-Methode.
Übrigens, Sie können auch löschen von untergeordneten Datensätzen über eine ähnliche Technik zu löschen, die gegen eine key-preserved-Ansicht.
Natürlich ist dies nicht die Frage beantworten, warum Sie wollen würde, um ein übergeordnetes Attribut in einer untergeordneten Tabelle.