create or replace procedure createtables
Authid current_user as
begin
execute immediate 'create table newcustomer as select * from customer';
end;
create or replace procedure e
is
begin
createtables;
select * from newcustomer;
end;
我上面有两个程序。第一个将创建一个名为newcustomer的新表,第二个过程将调用第一个过程并查询newcustomer表。当我尝试编译这段代码时,它表示该表尚未创建,我并没有真正得到它,因为我已经调用了createtables过程,因此我假设我创建了该表。
任何帮助将不胜感激。感谢
答案 0 :(得分:3)
编译第二个程序没有执行第一个程序将首先失败,因为尚未创建表。
您无法编译依赖于不存在的对象的过程。
在创建程序EXEC createtables
之前使用e
,不要在其中调用createtables
。
程序e
也不会编译,因为您没有使用select * from newcustomer
的结果作为游标或将结果存储到变量中。
修改强>:
您可以使用匿名块代替过程。将以下内容放入文件并执行(例如,通过SQL * Plus):
Create Table newcustomer As Select * From customer;
Begin
Null; --# Do something with your new table in here.
End;
/