在DDL语句上执行立即

时间:2017-02-19 08:45:08

标签: sql oracle plsql

我在Oracle数据库中执行了以下代码,但遇到了视图名称不存在的错误。任何人都可以看一下吗?

COLOR_ORDER

我知道DDL语句是自动提交的,但在这种情况下,我必须在execute immediate语句之后添加一个commit语句来解决问题。

1 个答案:

答案 0 :(得分:5)

您得到的是 编译 错误。 PL/SQL将在执行之前进行编译。因此,在编译期间,您尝试SELECT的表将无法使用。因而错误。仅当视图名称已存在时,才会起作用。试试你的select也是动态的。

Declare 
Stmt varchar2(2000);
Var number;
Begin
Stmt:='create or replace view emp_dept_v as select * from emp';
Execute immediate stmt;

Stmt:='Select count(*) from emp_dept_v';
Execute immediate stmt into var;
Dbms_output. Put_line(var);
End;
/

顺便说一下,DDLs不需要COMMIT;