Ich versuche, mehrere ddl-Anweisungen innerhalb einer Execute Immediate-Anweisung auszuführen. Ich dachte, das wäre ziemlich einfach, aber es scheint, dass ich mich irre.ORACLE Batching DDL-Anweisungen innerhalb eines Execute Immediate
Die Idee ist folgende:
declare v_cnt number;
begin
select count(*) into v_cnt from all_tables where table_name='TABLE1' and owner = 'AMS';
if v_cnt = 0 then
execute immediate 'CREATE TABLE TABLE1(VALUE VARCHAR2(50) NOT NULL) ALTER TABLE TABLE1 ADD (MYVAL2 NVARCHAR2(10))';
end if;
end;
jedoch führt dies zu einem Fehler
ORA-00911: ungültiges Zeichen ORA-06512: in Zeile 10
Jede Die Anweisungen innerhalb des Stapels laufen gut, wenn ich sie selbst ausführe. und wenn ich diese Aussage nehme und sie ausführe, läuft sie gut (mit den; zwischen den 2 Aussagen). Wenn ich das entferne; zwischen den Anweisungen bekomme ich einen anderen Fehler über ungültige Option
der Plan ist, dass ich in der Lage sein werde, eine Tabelle zu erstellen, exportieren Sie das Tabellenschema für diese Tabelle einschließlich aller Änderungen Anweisungen, und führen Sie dann den Stapel gegen ein anderes System als Teil eines Installations-/Aktualisierungsprozesses.
Also, wie Batch ich diese DDL-Anweisungen innerhalb einer einzigen Ausführung sofort? Oder gibt es einen besseren Weg, um das zu tun, was ich brauche?
Ich bin ein bisschen ein Oracle newb, ich muss zugeben. Vielen Dank für Ihre Geduld.
Die Tabellenerstellung und Änderungen werden als eine einzelne Datei exportiert und im Moment gibt es genug davon, dass es sich lohnt, es in 1 EXECUTE IMMEDIATE vs vielen pro db-Objekt zu versuchen. – Beta033
In diesem Fall würde ich vorschlagen, nur die richtige DDL in erster Linie zu erzeugen. Schau dir DBMS_METADATA an. :-) – cagcowboy
sieht aus wie das ist mein Problem beheben kann. Leider lag die offensichtliche Antwort direkt vor meiner Nase. Lektion gelernt: Verwenden Sie nicht TOAD, um die Struktur auszugeben, obwohl es ein schickes GUI-Menü dafür gibt. – Beta033