2012-11-27 22 views
0
create or replace 
FUNCTION test_fun (
p_ref_cur    OUT SYS_REFCURSOR, 
p_a_code   IN NUMBER         DEFAULT 0, 
p_category   IN package.category%TYPE   DEFAULT NULL, 
p_name    IN package.name%TYPE   DEFAULT NULL, 
p_display_name  IN package.display_name%TYPE DEFAULT NULL, 
p_rowid    IN package."rowid"%TYPE    DEFAULT NULL, 
p_flg    IN package.flg%TYPE    DEFAULT '1', 
p_mod_dat   IN package.mod_dat%TYPE   DEFAULT SYSTIMESTAMP, 
p_mod_usr   IN package.mod_usr%TYPE   DEFAULT NULL 
) 
RETURN NUMBER 
AS 

如何調用該函數在Oracle具有SYS_REFCURSOR作爲OUT參數的Oracle功能?如何調用具有SYS_REFCURSOR作爲OUT參數

更新: ** ** test_fun會從另一個函數調用說主叫()在哪裏執行將被從數據庫中取出並使用執行立即命令執行完整的功能。

SELECT command into cmd from data_table where id=p_id; 
execute immediate (cmd); 

CMD值會像

test_fun(v_cv1,0, 'pp', 'np123', 'np', NULL, 1, NULL, 'testuser');

注:我們有過調用者()功能控制和CMD要執行,但在沒有控制test_fun()

任何幫助,非常感謝。

+1

有你爲什麼不聲明遊標作爲IN OUT任何具體的原因是什麼? –

+0

那是怎麼回事。我沒有任何控制權。 – james007

+0

您正在使用哪個SQL客戶端?處理ref遊標*非常*客戶特定。 –

回答

0

只需在調用塊中聲明一個類型爲SYS_REFCURSOR的變量,然後調用您的函數,例如,從SQL /加:

set autoprint on; 
var cur refcursor; 

declare 
     FUNCTION test_fun (
     p_ref_cur    OUT SYS_REFCURSOR) 
     RETURN NUMBER is 
     begin 
     open p_ref_cur for select * from dual; 
     return 1; 
     end; 

begin 
    dbms_output.put_line(test_fun(:cur)); 
end; 
/
0

這個程序做了魔法

PROCEDURE executecmd(cmd_in IN VARCHAR2) 
      AS 
      v_cv1 SYS_REFCURSOR; 
      BEGIN 
       dbms_output.put_line('Executing cmd: '|| cmd); 

       execute immediate 'declare 
        result number; 
        BEGIN 
        result:='||cmd_in||';'|| 
        'END;' 
        USING v_cv1; 
      END; 
相關問題