Oracle plsql-for循环通过游标
我的光标循环出现问题 我有多个location\u name条目,试图一次显示5个,并将其设置为look\u item\u cursorOracle plsql-for循环通过游标,oracle,for-loop,plsql,cursor,Oracle,For Loop,Plsql,Cursor,我的光标循环出现问题 我有多个location\u name条目,试图一次显示5个,并将其设置为look\u item\u cursor CURSOR look_item_cursor IS SELECT * FROM (SELECT DISTINCT location_name FROM inventory_info_v i WHERE i.item_code = lr_item.item_code) a WHERE rownu
CURSOR look_item_cursor IS
SELECT *
FROM (SELECT DISTINCT location_name
FROM inventory_info_v i
WHERE i.item_code = lr_item.item_code) a
WHERE rownum <= (ln_page + 4)
AND rownum >= ln_page;
将lv_位置_名称指定为
look_item_cursor%ROWTYPE
然而,当它在整个查询中运行时,我得到了一个常规异常,我不知道为什么。任何帮助都将不胜感激 来自
循环语句的光标cursorforloop语句隐式地将其循环索引声明为指定游标返回的行类型的记录变量,然后打开一个游标。在每次迭代中,cursorforloop语句从结果集中提取一行到记录中。当不再有行可提取时,循环游标语句关闭游标。如果循环内的语句将控制转移到循环外或引发异常,则光标也将关闭 尝试以下操作(用(…)循环中的
内的查询替换测试数据)
:
此代码使光标打开两次:
- 在
openlook\u item\u游标中明确显示
- 隐式地初始化
FOR-LOOP
有必要警惕我在代码中注意到的一些问题制造者:
FOR-LOOP
中本地使用它ln\u page
,应该通过严格的和rownum>=ln\u page
)的下边框无法按预期工作。在Oracle 12c上,请使用限制行
子句,否则需要具有行号的内联视图。对这两种情况都进行了详细描述请发布一个完整的堆栈跟踪。如果您对循环使用游标
(正如您在示例中尝试的那样),则1。不要显式打开游标(游标FOR
loop为您打开);2.不要像使用lv\u location\u name
variable那样显式声明游标循环变量(游标FOR
loop为您执行此操作)。因此,您可以显式使用游标(显式打开、获取和关闭),也可以使用游标FOR
循环,这将为您完成大部分工作(打开游标、声明游标变量、获取和关闭游标)。非常有帮助,谢谢。对于这种类型的循环,是否需要包含“退出时间”?我这样问是因为它在分配第五个和最后一个条目编辑时出错:没关系,那是愚蠢的事情。非常感谢@Nicholas Krasnov的评论解决了这个问题。非常有帮助,谢谢
look_item_cursor%ROWTYPE
begin
for row_ in (
select 1 id, 'item 1' name from dual union all
select 2 id, 'item 2' name from dual union all
select 3 id, 'item 3' name from dual
) loop
dbms_output.put_line('id:'||row_.id||' name:'||row_.name);
end loop;
end;
-- dbms output
id:1 name:item 1
id:2 name:item 2
id:3 name:item 3