Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle plsql-for循环通过游标_Oracle_For Loop_Plsql_Cursor - Fatal编程技术网

Oracle plsql-for循环通过游标

Oracle 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

我的光标循环出现问题

我有多个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 rownum <= (ln_page + 4)
     AND rownum >= ln_page;
将lv_位置_名称指定为

look_item_cursor%ROWTYPE
然而,当它在整个查询中运行时,我得到了一个常规异常,我不知道为什么。任何帮助都将不胜感激

来自

循环语句的光标
cursorforloop语句隐式地将其循环索引声明为指定游标返回的行类型的记录变量,然后打开一个游标。在每次迭代中,cursorforloop语句从结果集中提取一行到记录中。当不再有行可提取时,循环游标语句关闭游标。如果循环内的语句将控制转移到循环外或引发异常,则光标也将关闭

尝试以下操作(用(…)循环中的
内的查询替换测试数据)


此代码使光标打开两次:

  • openlook\u item\u游标中明确显示
  • 隐式地初始化
    FOR-LOOP
我想你有例外。 为了避免这种情况-删除OPEN和CLOSE语句,只需在循环中使用游标,它就会自动打开和关闭


有必要警惕我在代码中注意到的一些问题制造者:

  • 不需要声明循环变量。从声明部分删除它-只需在
    FOR-LOOP
    中本地使用它

  • 从外部上下文传递变量
    ln\u page
    ,应该通过严格的

  • rownum(
    和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