1 つの 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 ステートメントを単一の即時実行内でバッチ処理するにはどうすればよいでしょうか? または、必要なことを行うためのより良い方法はありますか?
私は少しオラクル初心者ですが、認めざるを得ません。お待ちいただきありがとうございます。