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;
另怎么使用存储过程中的输出游标,请各位指点。
for i in 1..10000 loop --最起码要写上从哪开始循环到哪
null;
end loop;
DECLARE
CURSOR my_cursor IS SELECT object_name FROM user_objects;
l_obj_name varchar2(100);
BEGIN
OPEN my_cursor;
LOOP
FETCH my_cursor INTO l_obj_name;
EXIT WHEN my_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_obj_name);
END LOOP;
CLOSE my_cursor;
END;
begin
strSql := 'select objid from ALARMER.' || TABLENAME;
open c_ru for strSql;
execute immediate strSql;
....建议lz还是使用带参数的游标更合适.
for xx in cursor又重新打开一次。所以报错。可以用
loop
fetch into
end loop
因为它自动执行的open不是for string 方式
理解下动态游标的使用