2014-08-30 46 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变量得到的结果(使用...按钮远对)。

相关问题