我试图在一个 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 行
如果我自己执行批处理中的每个语句,它们都运行良好。如果我接受这个语句并执行它,它会运行良好(两个语句之间有 ; )。如果我删除 ; 在语句之间我得到一个关于无效选项的不同错误
计划是我将能够构建一个表,导出该表的表模式,包括它的所有更改语句,然后作为安装/更新过程的一部分对另一个系统运行批处理。
那么,我如何在单个执行立即数中批处理这些 DDL 语句?还是有更好的方法来做我需要的事情?
我必须承认,我有点像 Oracle 新手。谢谢大家的耐心。