to : 包子 我觉得不会是索引问题 那么我用的是CreditLoop过程,最后一行记录会重复输出一次 怎么解释呢?
你可以用一个多于记录个数的定值循环来操作一下就明白了 create or replace procedure p_testa is v_no varchar2(5); cursor cur is select no from testa; i integer; begin open cur; i:=1; loop
fetch cur into v_no; dbms_output.put_line(v_no); v_no:='aaa'; --exit when cur%notfound; i:=i+1; if i=5 then exit; end if; end loop; end p_testa; SQL> select * from testa;NO SENDTO MAINNO STATUS ISPROC COL1 DDD ----- -------------------- -------------------- -------------------- ------ -------------------- -------------------------------------------------------------------------------- 11188 104 并行 0 11188 104 并行 0 SQL> exec p_testa; 11188 11188 aaa aaaPL/SQL procedure successfully completed
CREATE OR REPLACE PROCEDURE AA AS CURSOR C_ALLSTUDENTS IS SELECT id FROM STUDENTS ORDER BY ID; TYPE T_STUDENTS IS TABLE OF STUDENTS.Id%TYPE INDEX BY BINARY_INTEGER; i INTEGER := 1; v_students t_students; BEGIN OPEN C_ALLSTUDENTS; LOOP FETCH C_ALLSTUDENTS INTO V_STUDENTS(i); EXIT WHEN C_ALLSTUDENTS%NOTFOUND; //要放在fetch之后 dbms_output.put_line(V_STUDENTS(i)); i := i +1; END LOOP; CLOSE C_ALLSTUDENTS; END AA;就象select a into b from tname where 0=1一样 肯定回出错.
包子
我觉得不会是索引问题
那么我用的是CreditLoop过程,最后一行记录会重复输出一次
怎么解释呢?
create or replace procedure p_testa is
v_no varchar2(5);
cursor cur is select no from testa;
i integer;
begin
open cur;
i:=1;
loop
fetch cur into v_no;
dbms_output.put_line(v_no);
v_no:='aaa';
--exit when cur%notfound;
i:=i+1;
if i=5 then exit; end if;
end loop;
end p_testa;
SQL> select * from testa;NO SENDTO MAINNO STATUS ISPROC COL1 DDD
----- -------------------- -------------------- -------------------- ------ -------------------- --------------------------------------------------------------------------------
11188 104 并行 0
11188 104 并行 0 SQL> exec p_testa;
11188
11188
aaa
aaaPL/SQL procedure successfully completed
CURSOR C_ALLSTUDENTS IS
SELECT id
FROM STUDENTS
ORDER BY ID;
TYPE T_STUDENTS IS TABLE OF STUDENTS.Id%TYPE
INDEX BY BINARY_INTEGER;
i INTEGER := 1;
v_students t_students;
BEGIN
OPEN C_ALLSTUDENTS;
LOOP
FETCH C_ALLSTUDENTS INTO V_STUDENTS(i);
EXIT WHEN C_ALLSTUDENTS%NOTFOUND; //要放在fetch之后
dbms_output.put_line(V_STUDENTS(i));
i := i +1;
END LOOP;
CLOSE C_ALLSTUDENTS;
END AA;就象select a into b from tname where 0=1一样
肯定回出错.