2011-12-13 100 views
0

我有一個帶有下面簽名的ORACLE函數。使用函數oracle的某個輸出參數PL/SQL

Function function1(parameter1 in number, 
       parameter2 in number, 
       parameter3 in number, 
       parameter4 out number, 
       parameter5 out varchar(20), 
       parameter6 out varchar(20)) 
      RETURN number is 

我想在這樣的SQL使用此功能,

Select parameter5 
from table1 ti 
where function1(t1.parameter1,t1.parameter2,t1.parameter3) 

我怎樣才能訪問輸出parameter5在我的Select語句?由於我想批量執行上述選擇操作,因此我不習慣使用變量並循環遍歷結果集。

我不想使用數組,因爲我必須使用上面的SQL Query執行批量操作。

在此先感謝!

乾杯, Dwarak

回答

1

我假設你需要參數5和返回的數字,所以也許它會更好,如果你創建一個類型並重新調用它。

是這樣的:

create type res_type as object 
(
rc number, 
parameter5 varchar2(20) 
); 

Function function1(parameter1 in number, 
       parameter2 in number, 
       parameter3 in number, 
       parameter4 out number, 
       parameter5 out varchar(20), 
       parameter6 out varchar(20)) 
      RETURN res_type is 

UPDATE:

然後在你的選擇,你可以做這樣的事情:

select function1(t1.parameter1,t1.parameter2,t1.parameter3).parameter5 
from table1 ti 
where function1(t1.parameter1,t1.parameter2,t1.parameter3).rc = .... 
+0

感謝您的意見! – 2011-12-16 09:18:38

1

您不能直接,但你可以把一個包裝函數週圍,像:

function function1_wrap(parameter1 in number, 
    parameter2 in number, 
    parameter3 in number) 
    return varchar2 is 
declare 
    rc number; 
    parameter4 number; 
    parameter5 out varchar(20); 
    parameter6 out varchar(20); 
begin 
    rc := function1(parameter1, parameter2, parameter3, parameter4, parameter5); 
    return parameter5; 
end; 

,這可能不是因爲雖然批量操作很好地擴展;你可能會更好地嘗試複製函數如何獲得值並將其結合到您的選擇中,而不是多次調用函數。您可以刪除查找參數4和6的值的部件,作爲開始。

+0

謝謝this.it是一個真正的速贏.. :) – 2011-12-16 09:19:05

-1

你可以使用子查詢類似下面,

SELECT * FROM(選擇t1.parameter1,t1.parameter2,t1.parameter3功能1(t1.parameter1,t1.parameter2,t1.parameter3)從表1 T1 func_result )其中func_result = 1

+0

如何得到`parameter5`的值? – 2011-12-13 17:50:05

相關問題