2017-08-09 53 views
-2

請幫我寫一個程序過程與refcursor。 Refcursor應該是out參數。程序與refcursor .refcursor應該是參數

如果我給輸入DEPTNO它表明在該部門的員工詳細信息,還寫單元測試塊:

我想這樣的:

CREATE OR REPLACE PROCEDURE poph (i IN NUMBER, p OUT SYS_REFCURSOR) 
IS 
BEGIN 
    OPEN p FOR 'select * from emp where deptno=' || i; 

    FOR i IN p 
    LOOP 
     DBMS_OUTPUT.put_line (i.ename || '**' || i.JOB); 
    END LOOP; 

    CLOSE p; 
END; 
/

///////單元測試/// //

DECLARE 
    M NUMBER := '&n'; 
    n SYS_REFCURSOR; 
BEGIN 
    poph (M, n); 
END; 
+0

你希望我們爲你做全功課嗎?請嘗試自己解決問題,如果您遇到任何問題,請發佈問題。同時你也可以看看[幫助部分](https://stackoverflow.com/help)。 – Nitish

+0

創建或更換程序poph(我輸入數字,輸出sys_refcursor) IS BEGIN OPEN p FOR'select * from emp where deptno ='|| i; FOR i IN p loop dbms_output.put_line(i.ename ||'**'|| i.JOB); END循環; CLOSE p; 結束; ////////單元測試///// DECLARE m NUMBER:='&n'; n sys_refcursor; BEGIN poph(m,n); END; –

+0

無法用於循環refcursor .... plz gv解決方案 –

回答

0

您犯了2個錯誤。

1)爲動態選擇語句打開一個refcursor,如果沒有立即執行語句,它將不起作用。

OPEN p FOR'select * from emp where deptno ='||一世;

2)循環通過無效的引用光標;

因爲我IN P

這樣來做:

CREATE OR REPLACE PROCEDURE poph (i IN NUMBER, p OUT SYS_REFCURSOR) 
IS 

v_sql varchar2(100); 
BEGIN 
    v_sql := 'select employee_id,salary from employee where employee_id=' || i; 

    execute immediate v_sql; 

    OPEN p FOR v_sql; 

END; 
/

///////單元測試/////

DECLARE 
    M   NUMBER := '&n'; 
    n   SYS_REFCURSOR; 
    v_emp_id NUMBER; 
    v_sal  NUMBER; 
BEGIN 
    poph (M, n); 

    LOOP 
     FETCH n INTO v_emp_id, v_sal; 

     EXIT WHEN n%NOTFOUND; 
     DBMS_OUTPUT.PUT_LINE (v_emp_id); 
    END LOOP; 
END; 
+0

thing xing xing happy –

相關問題