我能检查声明光标吗?

时间:2017-05-31 12:01:49

标签: sql sybase-ase

我有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

1 个答案:

答案 0 :(得分:0)

您应该使用动态sql executionall_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;

编译时你不会有任何问题,因为有一个stringdynamic execution