二十、遊標的屬性及帶參遊標
阿新 • • 發佈:2018-12-02
遊標的屬性及帶參遊標
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