2015-06-22 73 views
0

我有問題的動態調用存儲過程動態調用存儲過程(立即執行)輸出參數問題

v_sql  := 'begin '|| p_procname || '(''test1'','' test2 '',:v_output2); end;'; 
    execute immediate v_sql 
    using out v_output2 ; 
    dbms_output.put_line(v_output2 || ' '); 

在這裏我可以打電話與執行程序直接。 但我的問題是動態綁定變量。這個值來自日誌表,然後我解析爲execute_immediate過程

v_sql  := 'begin '|| p_procname || '(''test1'','' test2'',:v_output2); end;'; 
    v_sql1:= ||using|| 'out v_output2 ' ; 

    execute immediate v_sql 
    v_sql1; 

它不這樣工作。我怎樣才能使動態變量綁定,因爲我打電話了很多程序,這是程序有不同的輸入和輸出參數。 我希望你能明白我有什麼問題。怎麼我可以通過這個問題THX

回答

2

這裏是簡單的程序相同

create procedure test_proc(p_user varchar2, p_code varchar2, p_error varchar2) is 
begin 
    p_error := p_user || p_code; 
end; 

調用代碼..

Declare 
    v_test_proc varchar2(50) := 'test_proc'; 
    p_user  varchar2(50) := 'test_name'; 
    p_code  varchar2(50) := 'test_code'; 
    p_error  varchar2(100); 
    v_sql  varchar2(2000); 
begin 
    v_sql := 'begin ' || v_test_proc || '(:1 ,:2, :3); end;'; 
    execute immediate v_sql 
    using p_user, p_code, out p_error; 
    dbms_output.put_line(p_error); 
end;