Oracle 试图从记录中读取游标,但获取准确的获取返回的行数超过请求的行数?
我正试图从记录中读取游标,但出现了错误 ORA-01422:精确获取返回的行数超过请求的行数 ORA-06512:在第14行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
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;