Oracle EXECUTE IMMEDIATE未执行存储过程中预期的操作
我有一个存储过程,其中有几个检查,但是下面的部分给出了执行立即数的问题 例如,当我试图用下面的语句编译过程时,它会抱怨表或视图不存在Oracle EXECUTE IMMEDIATE未执行存储过程中预期的操作,oracle,Oracle,我有一个存储过程,其中有几个检查,但是下面的部分给出了执行立即数的问题 例如,当我试图用下面的语句编译过程时,它会抱怨表或视图不存在 ... ... ... EXECUTE IMMEDIATE 'CREATE TABLE mytable(col1 number, col2 number, col3 number)'; EXECUTE IMMEDIATE 'INSERT INTO mytable (col1,col2,col3) SELECT a,b,c FROM source_table'
...
...
...
EXECUTE IMMEDIATE 'CREATE TABLE mytable(col1 number, col2 number, col3 number)';
EXECUTE IMMEDIATE 'INSERT INTO mytable (col1,col2,col3)
SELECT a,b,c FROM source_table' ;
SELECT COUNT(*) INTO c FROM mytable;
6:18:22[创建-0行,0.000秒]{50:29}PL/SQL:ORA-00942:表或视图不存在
但是,
如果我移除
从mytable中选择COUNT(*)到c
它编译并运行
请就可能是非常简单的解决方案提出建议
谢谢当Oracle编译存储过程时,它会检查是否存在
mytable
。如果mytable
在编译时不存在,它将给您一个错误
您的选择:
executeimmediate
)执行SELECT COUNT(*)…
,就像您已经在执行INSERT
语句一样c
变量,如下所示:
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM mytable' INTO c;
但是,在存储过程中混合使用DDL语句和查询通常不是一个好主意,因为:
commit
在存储的SP创建脚本中,我们专门创建和删除所需的表,以消除对此类动态SQL的需要。