2016-01-27 22 views
0

我想在一個oracle過程中使用綁定變量,並且遇到錯誤。下面是我使用的代碼:在PL SQL腳本中使用綁定變量問題

DECLARE 
sql_stmt  varchar2(4000); 
parm1   varchar2(100); 
parm2   varchar2(100); 
parm3   varchar2(100); 
parm4   varchar2(100); 

BEGIN 
parm1 := 'test1'; 
parm2 := 'test2'; 
parm3 := 'test3'; 
parm4 := 'test4'; 

sql_stmt := ‘EXEC PROCESS_ARCHIVE.START_PROCESSARCHIVE(CHR(39)||:1||CHR(39),null, CHR(39)||:2||CHR(39), CHR(39)||:3||CHR(39), CHR(39)||:4||CHR(39))’; 
EXECUTE IMMEDIATE sql_stmt using parm1,parm2,parm3,parm4; 

END; 
/

當此執行,我得到的錯誤:「SP-0552:綁定變量‘4’未聲明」。我是PL \ SQL的初學者,所以我仍然在學習,但我無法弄清楚這個錯誤來自哪裏。任何幫助將不勝感激。謝謝。

+2

不知道是否可以幫助,但爲什麼是字符串的報價太奇怪了(不只是撇號)以及爲什麼在該字符串中包含'EXEC'語句?畢竟,如果你想調用這樣一個簡單的過程,你完全不需要使用動態SQL。 – AndrewMcCoist

回答

0

這對我的作品......

create or replace procedure testProc(a varchar2, 
            b varchar2 default null, 
            c varchar2, 
            d varchar2, 
            e varchar2) as 
begin 
    dbms_output.put_line('a: '||a); 
    dbms_output.put_line('b: '||b); 
    dbms_output.put_line('c: '||c); 
    dbms_output.put_line('d: '||d); 
    dbms_output.put_line('e: '||e); 
end; 
/

declare 
    sql_stmt varchar2(4000); 
    parm1 varchar2(100); 
    parm2 varchar2(100); 
    parm3 varchar2(100); 
    parm4 varchar2(100); 
begin 
    parm1 := 'test1'; 
    parm2 := 'test2'; 
    parm3 := 'test3'; 
    parm4 := 'test4'; 

    sql_stmt := 'begin testProc(:1, null, :2, :3, :4); end;'; 
    EXECUTE IMMEDIATE sql_stmt using IN parm1, IN parm2, IN parm3, IN parm4; 
end; 
/

結果...

a: test1 
b: 
c: test2 
d: test3 
e: test4