1、%ISOPEN判断游标是否打开
DECLARE
CURSOR emp_cur
IS SELECT * FROM EMP; --声明游标
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
IF emp_cur%ISOPEN THEN --判断游标是否打开
LOOP
FETCH emp_cur INTO emp_var; --获取游标数据
EXIT WHEN emp_cur%NOTFOUND; --结束循环
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
--输出数据
END LOOP;
ELSE
DBMS_OUTPUT.put_line('游标emp_cur没有被打开');
END IF;
END;
2、%FOUND、%NOTFOUND判断数据是否有效
DECLARE
CURSOR emp_cur
IS SELECT * FROM EMP; --声明游标
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
OPEN emp_cur; --打开游标
LOOP
FETCH emp_cur INTO emp_var; --获取游标数据
IF emp_cur%FOUND THEN
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
--输出数据
ELSE
DBMS_OUTPUT.put_line('没有数据被提取');
EXIT;
END IF;
END LOOP;
CLOSE emp_cur; --关闭数据
END;
3、%ROWCOUNT判断条数
DECLARE
CURSOR emp_cur
IS SELECT * FROM EMP; --声明游标
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
OPEN emp_cur; --打开游标
LOOP
FETCH emp_cur INTO emp_var; --获取游标数据
IF emp_cur%FOUND THEN
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
--输出数据
DBMS_OUTPUT.put_line('读取了第'|| emp_cur%ROWCOUNT ||'条');
ELSE
DBMS_OUTPUT.put_line('没有数据被提取');
EXIT;
END IF;
END LOOP;
CLOSE emp_cur; --关闭数据
END;
结果:
7369-SMITH-CLERK-7902
读取了第1条
7499-ALLEN-SALESMAN-7698
读取了第2条
7521-WARD-SALESMAN-7698
读取了第3条
7566-JONES-MANAGER-7839
读取了第4条
7654-MARTIN-SALESMAN-7698
读取了第5条
7698-BLAKE-MANAGER-7839
读取了第6条
7782-CLARK-MANAGER-7839
读取了第7条
7788-SCOTT-ANALYST-7566
读取了第8条
7839-KING-PRESIDENT-
读取了第9条
7844-TURNER-SALESMAN-7698
读取了第10条
7876-ADAMS-CLERK-7788
读取了第11条
7900-JAMES-CLERK-7698
读取了第12条
7902-FORD-ANALYST-7566
读取了第13条
7934-MILLER-CLERK-7782
读取了第14条
没有数据被提取
4、带参数游标
DECLARE
CURSOR emp_cur(deptno_var NUMBER)
IS SELECT * FROM EMP WHERE DEPTNO=deptno_var; --声明游标
emp_var EMP%ROWTYPE; --声明变量:变量emp_var是表EMP的行类型
BEGIN
OPEN emp_cur(30); --打开游标
LOOP
FETCH emp_cur INTO emp_var; --获取游标数据
EXIT WHEN emp_cur%NOTFOUND; --结束循环
DBMS_OUTPUT.put_line(emp_var.EMPNO ||'-'|| emp_var.ENAME||'-'||emp_var.JOB||'-'||emp_var.MGR);
--输出数据
END LOOP;
CLOSE emp_cur; --关闭数据
END;
结果:
7499-ALLEN-SALESMAN-7698
7521-WARD-SALESMAN-7698
7654-MARTIN-SALESMAN-7698
7698-BLAKE-MANAGER-7839
7844-TURNER-SALESMAN-7698
7900-JAMES-CLERK-7698