记录存储过程使用游标进行遍历
1、初始化表等数据,用于测试使用游标遍历的存储过程
CREATE TABLE TEST(ID NUMBER PRIMARY KEY , NAME VARCHAR(64)); INSERT INTO TEST VALUES(1,'CHEN'); INSERT INTO TEST VALUES(2,'LYLY');
2、游标遍历的存储过程sql
CREATE OR REPLACE PROCEDURE TEST_CURSOR(I_ID IN NUMBER) IS CURSOR C_TEST IS SELECT ID,NAME FROM TEST T WHERE T.ID = I_ID ; --声明显式游标 C_T C_TEST%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_TEST的记录 BEGIN
DBMS_OUTPUT.ENABLE(BUFFER_SIZE=>NULL); --FOR 循环 FOR C_T IN C_TEST LOOP DBMS_OUTPUT.PUT_LINE('FOR: '||C_T.ID ||'-'|| C_T.NAME); END LOOP; --WHILE 循环 OPEN C_TEST; --必须要明确的打开游标 FETCH C_TEST INTO C_T; WHILE C_TEST%FOUND LOOP DBMS_OUTPUT.PUT_LINE('WHILE: '||C_T.ID|| '-' || C_T.NAME); FETCH C_TEST INTO C_T; END LOOP; CLOSE C_TEST; --必须要明确的关闭游标 --FETCH 循环 OPEN C_TEST; --必须要明确的打开游标 LOOP FETCH C_TEST INTO C_T; EXIT WHEN C_TEST%NOTFOUND; DBMS_OUTPUT.PUT_LINE('FETCH: '||C_T.ID|| '—' || C_T.NAME); END LOOP; CLOSE C_TEST; --必须要明确的关闭游标 END;