我有一个存储过程,其中包含多个检查,但是以下部分给出了执行立即
的问题例如,当我尝试使用以下语句编译过程时,它会抱怨表或视图不存在。
...
...
...
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:表或视图不存在
然而,
如果我删除
SELECT COUNT(*)INTO c FROM mytable;
它编译并运作。
请告知可能是一个非常简单的评论。
由于
答案 0 :(得分:2)
当Oracle编译存储过程时,它会检查是否存在mytable
。如果编译时不存在mytable
,则会出错。
您的选择:
SELECT COUNT(*) ...
)执行EXECUTE IMMEDIATE
时遇到困难,就像您已经为INSERT
声明所做的那样。请注意,如果您决定使用第二个选项,则可以将查询结果分配给c
变量,如下所示:
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM mytable' INTO c;
但是,将DDL语句与存储过程中的查询混合通常不是一个好主意,因为:
commit
。