Oracle存儲過程中游標的簡單使用


存儲過程中查詢語句如何返回多行結果?
我們知道,如果存儲過程中查詢語句有多行結果輸出,會報錯:ORA-01422: exact fetch returns more than requested number of rows
若想讓存儲過程中的查詢語句返回多行結果不報錯,則需要使用游標來實現。
本例主要也是用來熟悉存儲過程中游標的簡單使用方法。案例所涉及的數據表使用的是oracle自帶的scott用戶。

1.打開輸出選項

SET SERVEROUTPUT ON;

2.創建查詢員工薪水的存儲過程

create or replace procedure proc_salary is 

  --定義變量
  v_empno emp.empno%TYPE;
  v_ename emp.ename%TYPE;
  v_sal emp.sal%TYPE;
  
  --定義游標
  CURSOR emp_cursor IS
  SELECT empno, ename, sal from emp;
  
BEGIN

--循環開始
LOOP

  IF NOT emp_cursor%ISOPEN  THEN
     OPEN emp_cursor;
  END IF; 
  
  FETCH emp_cursor INTO  v_empno, v_ename, v_sal; 
  --退出循環的條件
  EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL;
 
  dbms_output.put_line('員工編號為' || v_empno || '的' || v_ename || '薪水為:' || v_sal);
    
END LOOP;

END;
/

3.執行存儲過程
exec proc_salary;

SQL> exec proc_salary;
員工編號為7369的SMITH薪水為:800
員工編號為7499的ALLEN薪水為:1600
員工編號為7521的WARD薪水為:1250
員工編號為7566的JONES薪水為:2975
員工編號為7654的MARTIN薪水為:1250
員工編號為7698的BLAKE薪水為:2850
員工編號為7782的CLARK薪水為:2450
員工編號為7788的SCOTT薪水為:3000
員工編號為7839的KING薪水為:5000
員工編號為7844的TURNER薪水為:1500
員工編號為7876的ADAMS薪水為:1100
員工編號為7900的JAMES薪水為:950
員工編號為7902的FORD薪水為:3000
員工編號為7934的MILLER薪水為:1300

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.00


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM