1つのExecute Immediateステートメント内で複数のddlステートメントを実行しようとしています。 これはかなり正直なものだと思ったが、間違っているようだ。ORACLE Execute Immediate内のDDLステートメントのバッチ
考えはこれです:
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;
は、しかし、これはエラー
ORA-00911になり:無効な文字 ORA-06512:行で10
の各バッチ内のステートメントは、それらを単独で実行するとうまく動作します。私はこのステートメントを取って実行すると、(2つのステートメントの間に;で)うまく動作します。もし私が削除した場合;間違ったオプションについて別のエラーが表示される
私はテーブルを作成し、このテーブルのテーブルスキーマをすべての変更ステートメントを含めてエクスポートしてから別のシステムに対してバッチを実行できるようにしますインストール/アップデートプロセスの一部。
したがって、これらのDDLステートメントを1回の実行で即時にバッチするにはどうすればよいですか?それとも、私が必要としていることをするための良い方法がありますか?
私はOracle newbのビットですが、私は認めなければなりません。皆さん、ご尽力していただきありがとうございます。
テーブルの作成と変更は1つのファイルとしてエクスポートされますが、現在のところ、1 EXECUTE IMMEDIATEと多数のdbオブジェクトでそれを実行しようとするほどの問題はあります。 – Beta033
その場合は、最初に正しいDDLを生成することをお勧めします。 DBMS_METADATAを見てください。 :-) – cagcowboy
これは私の問題を解決するかもしれないようです。悲しいことに明らかな答えは私の鼻の下にあった。 教訓:空想GUIメニューがあるにもかかわらず、構造を出力するためにTOADを使用しないでください。 – Beta033