create or replace
PACKAGE P_ALARM IS
TYPE CUR1 IS REF CURSOR;
END P_ALARM;create or replace
PROCEDURE StatKPI_AtchByCI()
IS
icount number;
c_ru ALARMER.P_ALARM.CUR1;
begin
strSql := 'select objid from ALARMER.' || TABLENAME;
open c_ru for strSql;--为什么在这里一用以下几句就报错?
for cc in c_ru
loop
icount := cc.objid;
end loop;
--不加则没事
end;
另怎么使用存储过程中的输出游标,请各位指点。
PACKAGE P_ALARM IS
TYPE CUR1 IS REF CURSOR;
END P_ALARM;create or replace
PROCEDURE StatKPI_AtchByCI()
IS
icount number;
c_ru ALARMER.P_ALARM.CUR1;
begin
strSql := 'select objid from ALARMER.' || TABLENAME;
open c_ru for strSql;--为什么在这里一用以下几句就报错?
for cc in c_ru
loop
icount := cc.objid;
end loop;
--不加则没事
end;
另怎么使用存储过程中的输出游标,请各位指点。
loop
icount := cc.objid;
end loop;
strSql:是定义过得,
这里只是截取部分,只要一加上
for cc in c_ru
loop
icount := cc.objid;
end loop;
就编译不通过。
因此你的程序相当于先用for string方式open了一次,然后又没用for string方式open了一次,因此动态游标不能用for...in...loop方式使用,只能用
open
loop
fetch
end loop
close
方式使用
PACKAGE P_ALARM IS
TYPE CUR1 IS REF CURSOR;
END P_ALARM; create or replace PROCEDURE StatKPI_AtchByCI
IS
icount number;
c_ru P_ALARM.CUR1;
begin
open c_ru for select user_id from all_users; loop
fetch c_ru into icount;
exit when c_ru%notfound;
DBMS_OUTPUT.PUT_LINE(icount);
end loop;
end;