1、游标的概念(cursor):
系统为用户开辟的一个数据缓冲区,用于存放sql语句的执行结果。在某些情况下,用户需要对磁盘上的多条数据进行处理,游标的使用可以有效避免频繁的数据交换,提供工作效率
2、游标的种类
(1)、隐式游标:
进行DML操作或者使用单行的select查询时使用
游标的属性:
SQL%ROWCOUNT:整型,表示游标执行的DML语句影响数据库中数据的行数
SQL%FOUND:布尔类型,表示插入,删除,更新或者单行查询是否成功
SQL%NOTFOUND:布尔类型,表示的含义与SQL%FOUND相反
SQL%ISOPEN:布尔类型,表示游标是否处于打开状态
eg:
DECLARE
--声明一个变量
message INT:=0;
BEGIN
INSERT INTO student (stu_id, stu_name, stu_sex, stu_age, grade_id) VALUES(sq_student.nextval,'tom', '0', '18', 1);
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('FOUNT IS TRUE');
ELSE
DBMS_OUTPUT.PUT_LINE(' FOUND IS NOT TRUE');
END IF;
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('NOT FOUND IS TRUE');
ELSE
DBMS_OUTPUT.PUT_LINE('NOT FOUND IS FALSE');
END IF;
IF SQL%ISOPEN THEN
DBMS_OUTPUT.PUT_LINE('ISOPEN IS TRUE');
ELSE
DBMS_OUTPUT.PUT_LINE('ISOPEN IS NOT TRUE');
END IF;
message:=SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE(message);
END;
(2)、显示游标
显示游标的使用主要分为以下四个步骤:
1)、声明游标:DECLARE CURSOR 游标名[(参数 参数类型)] IS SELECT 语句
注:游标的参数是可选的部分,如果有参数打开游标时一定要传入对应的实际参数值
2)、打开游标:OPNE CUROSR [(参数值)]
打开游标的时候,select的查询结果值就会传到对应的游标工作区
3)、提取数据:FETCH 游标名 INTO 变量名 or FETCH 游标名 into 记录变量
记录变量的声明方式:
变量名 表名|游标名%ROWTYPE;其中的表必须存在,游标名也必须先定义。
4)、关闭游标:CLOSE CURSOR
eg:
DECLARE
SNAME VARCHAR(20);
SAGE NUMBER(3);
CURSOR S_CURSOR(SID NUMBER) IS SELECT STU.STU_NAME,STU.STU_AGE FROM STUDENT STU WHERE STU.STU_ID=SID;
BEGIN
OPEN S_CURSOR(25);
FETCH S_CURSOR INTO SNAME,SAGE;
DBMS_OUTPUT.PUT_LINE(SNAME||','||SAGE);
CLOSE S_CURSOR;
END;
显示游标: