Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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 试图从记录中读取游标,但获取准确的获取返回的行数超过请求的行数?_Oracle - Fatal编程技术网

Oracle 试图从记录中读取游标,但获取准确的获取返回的行数超过请求的行数?

Oracle 试图从记录中读取游标,但获取准确的获取返回的行数超过请求的行数?,oracle,Oracle,我正试图从记录中读取游标,但出现了错误 ORA-01422:精确获取返回的行数超过请求的行数 ORA-06512:在第14行 declare ename table1.ename%TYPE; seq_ENAME NUMBER (4); CURSOR List_ENAME_cur IS SELECT ENAME from table1 WHERE status = 2 AND ROWNUM <= 100; begin FOR List_ENAME_rec IN Li

我正试图从记录中读取游标,但出现了错误

ORA-01422:精确获取返回的行数超过请求的行数 ORA-06512:在第14行

declare 
ename      table1.ename%TYPE;
seq_ENAME   NUMBER (4);


CURSOR List_ENAME_cur IS
SELECT ENAME from table1
WHERE status = 2 AND ROWNUM <= 100;

begin 

FOR List_ENAME_rec IN List_ENAME_cur
loop
select substr(ename,5,4),ENAME into seq_ENAME,ename from table1 where REGEXP_LIKE(ENAME,'[1-9]{4}[_][1-9]{2}[_][1-9]{2}[_][1-9]{2}[_][0-9]{4}');
DBMS_OUTPUT.PUT_LINE('seq_ENAME'||seq_ENAME);
end loop;
end;
声明
ename表1.ename%类型;
序号(4);
游标列表\u ENAME\u cur为
从表1中选择ENAME

其中status=2和ROWNUM此时您的光标和您在循环中执行的选择不相关。游标循环只标识多达100条记录,您在这些记录上循环,但不使用结果。你几乎做到了:

for i in 1..100 loop
  select ... into ... from ...
end loop;
因此,每次在循环中尝试将所有行选择到变量中时,都会出现错误

您可以在循环中引用游标变量,如
list\u ename\u rec.ename
。但是您在循环中添加了一个
where
子句;您仍然可以在循环中执行该测试,但也可以在游标声明中执行该测试:

declare
  CURSOR List_ENAME_cur IS
    SELECT ENAME, substr(ename,5,4)
    from table1
    WHERE status = 2
    AND REGEXP_LIKE(ENAME,
      '[1-9]{4}[_][1-9]{2}[_][1-9]{2}[_][1-9]{2}[_][0-9]{4}')
    AND ROWNUM <= 100;
begin  
  FOR List_ENAME_rec IN List_ENAME_cur
  loop
    DBMS_OUTPUT.PUT_LINE('seq_ENAME'||List_ENAME_rec.seq_ENAME);
  end loop;
end;
声明
游标列表\u ENAME\u cur为
选择ENAME,substr(ENAME,5,4)
来自表1
其中status=2
和REGEXP_LIKE(ENAME,
'[1-9]{4}[_][1-9]{2}[_][1-9]{2}[_][1-9]{2}[_][0-9]{4}')

和ROWNUM谢谢你的帮助和ROWNUM
declare 
  seq_ENAME   NUMBER (4);
  CURSOR List_ENAME_cur IS
    SELECT ENAME from table1
    WHERE status = 2
    AND ROWNUM <= 100;
begin 
  FOR List_ENAME_rec IN List_ENAME_cur
  loop
    if REGEXP_LIKE(List_ENAME_rec.ENAME,
        '[1-9]{4}[_][1-9]{2}[_][1-9]{2}[_][1-9]{2}[_][0-9]{4}')
    then
      seq_ENAME := substr(List_ENAME_rec.ename,5,4);
      DBMS_OUTPUT.PUT_LINE('seq_ENAME'||seq_ENAME);
    end if;
  end loop;
end;