我有2个程序
create procedure....
declare cursor c1 for
select * from tab1 ..
第二次过程
create procedure ...
create table tab1 (...)
第一个程序不会创建,因为缺少表。我不能改变命令或prc运行(长解释)。所以我想编译第一个程序,即使从光标读取的表不存在。
我能这样做吗?编辑:
if exists (select 1 from sysobjects s where s.name ='tab1' )
begin
declare IDNT_CRSR cursor for
SELECT 1 FROM tab1
end
答案 0 :(得分:0)
您应该使用动态sql execution
和all_objects
表,就像这样
Declare
lc_cursor sys_refcursor;
Begin
For C in (select *
from all_objects
where object_type='TABLE'
and object_name = 'tab1') loop
EXECUTE IMMEDIATE 'Begin open :usingcursor for Select 1 FROM tab1; end;'
USING IN OUT lc_cursor;
End loop;
End;
编译时你不会有任何问题,因为有一个string
和dynamic execution