2017-06-28 52 views
-2

我創建Oracle中返回一個表的功能,當我編譯它顯示錯誤:函數沒有得到編譯oracle?

Error line: 
PLS-00382: expression is of wrong type. 

這是我的函數:

Create function fn_list(BU number, DU number) return t_table 
is 
    rec t_table 
begin 
    /*more codes are here*/ 
    rec:= t_type(1,1,2) 
    return rec;/*error is here*/ 
end; 
end fn_list; 

create type t_type is object(ID number,BU number, DU number); 

create type t_table is table of t_type; 
+2

安置自己的完整代碼,這一個在很多地方看起來不正確。 –

+2

@PankajKumar:您正在創建只有三個NUMBER的自定義類型t_type。在你的電話線上,你試圖用4個數字(1,1,2,3)來創建它。 –

+0

除了Sudipta所說的之外,請張貼您的功能的簡化版本,以複製您的問題。大多數情況下,通過嘗試生成演示問題的最簡單測試用例,您可以發現問題的發生位置。即使你不能自己發現它,一個簡單而完整的測試案例也允許我們其他人運行代碼並幫助你發現問題。 – Boneist

回答

3

試試這個:

create type t_type is object(ID number,BU number, DU number); 
/
create type t_table is table of t_type; 
/
Create function fn_list(BU number, DU number) return t_table 
is 
    rec t_type; 
    tab t_table; 
begin 
    /*more codes are here*/ 
    rec:= t_type(1,1,2); 
    tab := new t_table(); 
    tab.extend; 
    tab(tab.last) := rec; 
    return tab; 
end fn_list; 
/
1

你的函數返回一個t_table類型,但你試圖返回一個t_type類型。您還有一個額外的END聲明和幾個缺少的分號。

可以糾正它,它簡化爲:

Create function fn_list(BU number, DU number) return t_table 
is 
begin 
    return t_table(t_type(1,1,2)); 
end fn_list; 
/