任何人都可以告诉我如何使用表类型作为输入参数调试函数,并且此函数返回一个流水线的表类型。
请参阅下面的详细信息。当我尝试测试它在匿名块下创建的功能时,但是当我点击调试按钮时它会出错:
匿名阻止:
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 :(得分:2)
您似乎正在使用PL / SQL Developer测试窗口来运行测试。我认出了评论Non-scalar parameters require additional processing
。
PL / SQL Developer的测试窗口不能很好地处理流水线功能。
您最好删除result
变量并将函数调用包装在open :cursor for select * from table(...)
中。将名为cursor
的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
变量中获取结果(使用最右侧的...
按钮。)