2014-08-30 47 views
0

任何人都可以讓我知道如何調試一個帶有表類型的函數作爲輸入參數,並且此函數返回一個表類型流水線。使用表類型作爲輸入參數調試函數

請參考下面details.When我嘗試測試它創建以下匿名塊的功能,但是當我在調試按鈕,點擊它給了錯誤:

匿名塊:

declare 
    -- Non-scalar parameters require additional processing 
    result t_bmk_q; 
    pit_srch_str t_parm; 
begin 
    -- Call the function 
    result := f_bmk_srch(pit_srch_str => pit_srch_str, 
           piv_op => 'ALL'); 
end; 


---f_bmk_q function returns table type t_bmk_q pipelined 


defintions: 
============== 
t_bmk_q --->table type 

t_bmk_q is TABLE OF r_bmk_q -->object of some attributes. 


pit_srch_str ---> is parameter of type t_parm which is table type of r_parm 


--plz see def of r_parm: 

CREATE OR REPLACE TYPE r_parm AS OBJECT 
    (
     p_abc     varchar2(200) 
       ,p_new_val    varchar2(2000) 
       ,CONSTRUCTOR FUNCTION r_parm 
        (
        p_abc     varchar2 
        ,p_new_val    varchar2 
       ) RETURN SELF AS RESULT 
     ); 

Example:I have below sample values to test and debug: 
r_parm('TAB1.VALUE','123321123') 

感謝 拉傑什

+0

而......你得到了什麼錯誤?你是否注意到'需要額外處理'部分? – 2014-08-30 22:42:51

+0

是的,我注意到,但我不知道我需要爲多維表類型的對象輸入參數添加什麼額外的東西。 – user2090701 2014-08-31 02:03:05

回答

2

看來您正在使用PL/SQL Developer測試窗口來運行測試。我承認評論Non-scalar parameters require additional processing

PL/SQL Developer的測試窗口不能很好地處理流水線功能。 您最好刪除result變量並在open :cursor for select * from table(...)中包裝函數調用。將一個名爲cursor的光標類型變量添加到窗口下方的變量列表中。

要填充輸入表,您可以簡單地'調用'表類型,將表中的每一行作爲單獨的參數傳遞。例如,

t_parm(r_parm(...), r_parm(...), r_parm(...)) 

您可以按照這種方式向表中添加儘可能多的行。

把這兩個變化結合在一起,我們有類似如下:

declare 
    pit_srch_str t_parm; 
begin 
    -- Create input table.  
    pit_srch_str := t_parm(
      r_parm('TAB1.VALUE','123321123'), 
      r_parm('TAB2.VALUE','456597646') 
); 

    -- Call the function 
    open :cursor for select * from table(f_bmk_srch(pit_srch_str => pit_srch_str, 
           piv_op => 'ALL')); 
end; 
/

一旦你運行該功能,您可以從cursor變量得到的結果(使用...按鈕遠對)。

相關問題