【发布时间】:2009-08-06 21:30:29
【问题描述】:
我试图在一个 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 新手。谢谢大家的耐心。
【问题讨论】:
标签: sql oracle oracle10g ora-00911