-- Start
显式游标又叫命名游标,就是通常我们说的游标。
CREATE TABLE Student(
Id INT NOT NULL,
Name VARCHAR2(30) NOT NULL,
Class VARCHAR2(10)
);
INSERT INTO Student VALUES (1, '张三', '116班');
INSERT INTO Student VALUES (2, '李四', '117班');
INSERT INTO Student VALUES (3, '王五', '118班');
DECLARE
-- 声明游标
CURSOR c1 RETURN Student%ROWTYPE;
-- 定义游标
CURSOR c1 RETURN Student%ROWTYPE IS
SELECT * FROM Student;
--声明并定义游标
CURSOR c2 IS SELECT Id, Name FROM Student;
-- 带参数的游标
CURSOR c3 (ClassName VARCHAR2) IS
SELECT * FROM Student WHERE Class = ClassName;
-- 根据游标定义记录变量
StudentRec c1%ROWTYPE;
BEGIN
-- c2%ISOPEN 检查游标是否是打开状态
IF c2%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('c2 游标没有打开.');
END IF;
-- 打开游标
OPEN c1;
LOOP
FETCH c1 INTO StudentRec;
EXIT WHEN c1%NOTFOUND; --检查是否没有找到,c1%FOUND 检查是否找到
DBMS_OUTPUT.PUT_LINE('得到 ' || TO_CHAR(c1%ROWCOUNT) || ' 行.');
DBMS_OUTPUT.PUT_LINE('学号: ' || StudentRec.Id || ', 姓名: ' || StudentRec.Name);
END LOOP;
-- 关闭游标
CLOSE c1;
-- 利用 FOR 迭代游标
FOR item IN c1
LOOP
DBMS_OUTPUT.PUT_LINE('学号: ' || item.Id || ', 姓名: ' || item.Name);
END LOOP;
-- 利用 FOR 迭代游标
FOR item IN c3('116班')
LOOP
DBMS_OUTPUT.PUT_LINE('学号: ' || item.Id || ', 姓名: ' || item.Name);
END LOOP;
END;
/
--更多参见:Oracle PL/SQL 精萃
-- 声明:转载请注明出处
-- Last Edited on 2015-01-12
-- Created by ShangBo on 2015-01-11
-- End