2017-06-01 39 views
0

我想在動態列名傳遞給計算其標準偏差動態SQL,在Oracle,下面是代碼:在存儲過程中

CREATE OR REPLACE 
PROCEDURE ReportCalculate 
    (
    param_columnName IN VARCHAR2 DEFAULT 'COMPUTED_CP_MLIFTOFF_KNOT9OR10' 
) 
    AS 
    sqlstr VARCHAR2(500); 
    result NUMBER; 
    BEGIN 
    sqlstr:='select stddev(:col) from LIDISUDUXIAO where 1=1 and NO_10_LIMITSIGN_DEPART_ID<>0'; 
    execute immediate sqlstr into result using param_columnName; 
    DBMS_OUTPUT.PUT_LINE(result); 
    END; 

我採用默認參數調用它,錯誤消息是:

Procedure execution failed 
ORA-01722: invalid number 
ORA-06512: at "AGS.REPORTCALCULATE", line 10 
ORA-06512: at line 1 

我該如何解決它?

+1

列名是一個標識符和標識符不能綁定。 –

回答

1

列名不能用作查詢的參數。你需要編輯sqlstr變量,包括所提供的param_columnName在查詢本身執行前:

CREATE OR REPLACE 
PROCEDURE ReportCalculate 
    (
    param_columnName IN VARCHAR2 DEFAULT 'COMPUTED_CP_MLIFTOFF_KNOT9OR10' 
) 
    AS 
    sqlstr VARCHAR2(500); 
    result NUMBER; 
    BEGIN 
    sqlstr:='select stddev(' || param_columnName || ') from LIDISUDUXIAO where 1=1 and NO_10_LIMITSIGN_DEPART_ID<>0'; 
    execute immediate sqlstr into result; 
    DBMS_OUTPUT.PUT_LINE(result); 
    END; 
+0

確實是:) – seal031