我正在嘗試解決 PL SQL 包的問題。我找到了一個類似的例子來解釋我的問題,因為我是學習 PL SQL 以及游標如何與程序一起作業的新手。
例如:
CREATE OR REPLACE PROCEDURE emp_by_job (
p_job VARCHAR2,
p_emp_refcur IN OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN p_emp_refcur FOR SELECT empno, ename FROM emp WHERE job = p_job;
END;
在這我看到 p_job 被定義為 VARCHAR2。然后 SQL 從 EMP 中選擇 job = p_job。我們將 p_job 定義為 VARCHAR2,沒有映射到任何地方的欄位。游標怎么知道job=p_job怎么辦,p_job的值從哪里來?
謝謝!
uj5u.com熱心網友回復:
一個程序在編譯時不做任何事情,它需要被呼叫/呼叫。p_job呼叫程序時將傳遞for 的值。在下面的示例中,emp_by_job從匿名 pl/sql 塊呼叫,其引數p_job值為“MANAGER”。
koen>CREATE OR REPLACE PROCEDURE emp_by_job (
2 p_job VARCHAR2,
3 p_emp_refcur IN OUT SYS_REFCURSOR
4 )
5 IS
6 BEGIN
7 OPEN p_emp_refcur FOR SELECT empno, ename FROM emp WHERE job = p_job;
8 END;
9* /
Procedure EMP_BY_JOB compiled
koen>set serveroutput on size 999999
koen>DECLARE
2 TYPE emp_t IS REF CURSOR;
3 l_emp emp_t;
4 l_emprow emp%ROWTYPE;
5 BEGIN
6 emp_by_job(p_job => 'MANAGER',p_emp_refcur => l_emp);
7 LOOP
8 FETCH
9 l_emp
10 INTO
11 l_emprow.empno,
12 l_emprow.ename;
13 EXIT
14 WHEN l_emp%notfound;
15 dbms_output.put_line(l_emprow.empno || ' ' || l_emprow.ename);
16 END LOOP;
17 END;
18* /
7698 BLAKE
7782 CLARK
7566 JONES
PL/SQL procedure successfully completed.
koen>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448730.html
上一篇:如何拆分具有逗號和冒號的字串
