Wie führe ich mehrere Skripte nacheinander in Oracle?
Habe ich das folgende Skript:
ALTER TABLE ODANBIRM
ADD (OBID NUMBER(10, 0) );
----------------------------------------------------------------------------
CREATE OR REPLACE TRIGGER TR_OB_INC
BEFORE INSERT ON ODANBIRM
FOR EACH ROW
BEGIN
SELECT SEQ_OB.NEXTVAL INTO :NEW.OBID FROM DUAL;
END;
-----------------------------------------------------------------------------
DECLARE
CURSOR CUR IS
SELECT ROWID AS RID FROM ODANBIRM;
RC CUR%ROWTYPE;
BEGIN
OPEN CUR;
LOOP
FETCH CUR INTO RC;
EXIT WHEN CUR%NOTFOUND;
UPDATE ODANBIRM SET OBID=SEQ_OB.NEXTVAL WHERE ROWID=RC.RID;
END LOOP;
CLOSE CUR;
COMMIT;
END;
Wie Sie sehen können, habe ich drei verschiedene scripts (ich habe Sie getrennt mit gestrichelten Linien.) Wenn ich das erste script läuft aber das zweite Skript, wo ich will, um erstellen Sie einen trigger nicht sagen "Begegnet symbol "ERKLÄREN"". Wenn ich das trigger-Skript zum erstellen Weg bekomme ich keine Fehler und der erste und der Letzte Skripte laufen mit kein problem. Was muss ich tun, um Sie laufen alle ohne Fehler?
EDIT: habe ich dann realisiert, dass das zweite Skript sollte genau so sein wie dieser:
UPDATE ODANBIRM SET OBID=SEQ_OB.NEXTVAL;
Damit diese einfache Sache in einer Schleife ist eine Verschwendung von Zeit und ineffizient. Ich habe einmal gehört, dass man SQL verwenden Sie so viel und so wenig PL SQL wie möglich für Effizienz. Ich denke, es ist eine gute Idee.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist /in der Zeile unmittelbar nach dem Ende eines scripts. Es ist erforderlich, auf ALLE am Ende der Skript-Zeilen für PL-Blöcke, inklusive der letzten. so...
Jedoch, tun Sie es nicht auf SQL-Anweisungen; wie es laufen wird, es zweimal (wie Benoit Punkte heraus in den Anmerkungen unten!)
/
nach einer ALTER-Anweisung wiederholen (oder es zumindest versuchen)./
sein sollte, setzen Sie nur nach PL/SQL-Blöcke (DECLARE...
,BEGIN...
, und nichts berühren {TYP/TYPE KÖRPER/PACKAGE/PACKAGE BODY/FUNKTION/PROZEDUR/TRIGGER}). Andere statements sind SQL-und abgeschlossen durch Semikolon. Hier kein Schaden, aber wenn Sie setzen Sie einen Schrägstrich nach einem SQL-UPDATE-Anweisung, spielen Sie es zweimal, und das kann SEHR schädlich sein.Sollte nicht Ihre anonymen block nur: