1、參數化的遊標
作用:多次開啟相同的遊標,返回不同的結果集。遊標聲明部分的形參必須與 OPEN語句中提供的實參相對應(數量與資料類型)。
例1:
DECLARE
v_empno emp1.empno%TYPE;
v_ename emp1.ename%TYPE;
CURSOR emp_cursor
(p_deptno NUMBER, p_job VARCHAR2) IS ——定義參 數時不需要指定精度
SELECT empno, ename
FROM emp1
WHERE deptno=p_deptno
AND job=p_job;
BEGIN
OPEN emp_cursor(30,'SALESMAN'); ——帶參數使用的遊標
LOOP
FETCH emp_cursor INTO v_empno, v_ename;
EXIT WHEN emp_cursor%NOTFOUND OR emp_cursor%NOTFOUND IS NULL;
DBMS_OUTPUT.PUT_LINE('empno is '||v_empno||' and '||' ename is '||v_ename);
END LOOP;
CLOSE emp_cursor;
END;
2、記錄+FOR+遊標參數
DECLARE
CURSOR emp_c (p_job VARCHAR2)
IS SELECT ename, sal FROM emp
WHERE job=p_job FOR UPDATE NOWAIT;
BEGIN
FOR e_record IN emp_c(UPPER('&jobs')) ——使用替代變數
LOOP
dbms_output.put_line(e_record.ename||'''s sal:'||e_record.sal);
END LOOP;
END;
/
Enter value for jobs: manager
old 6: for e_record in emp_c(upper ('&jobs'))
new 6: for e_record in emp_c(upper('manager'))
JONES's sal:2975
BLAKE's sal:2850
CLARK's sal:2450