管道 两个表传递数据 发生:不一致的数据类型
create or replace type place as object
(
line1 varchar2(20),
line2 varchar2(20),
city varchar2(20),
state_code varchar2(20),
zip varchar2(20)
);
create type placelist as table of place;
create or replace function f_table_obj_pipelined
return placelist pipelined
is
v_address place;
begin
for i in 1..3 loop
if(i = 1) then
v_address :=
place('20','vy','ny','1','usa');
elsif ( i = 2) then
v_address :=
place('21','nj','nj','2','js');
elsif (i = 3) then
v_address :=
place('22','ah','ah','3','zg');
end if;
pipe row(v_address);
end loop;
return;
end;
/
--select * from table(f_table_obj_pipelined);
create or replace function f_table_obj_pipelined1(p_ref_cursor sys_refcursor)
return placelist pipelined
is
v_address1 place;
v_address2 place;
begin loop
fetch p_ref_cursor into v_address1;
exit when p_ref_cursor%notfound;
if(v_address1.city = 'ny') then
v_address2.line1 := '24';
v_address2.line2 := 'cd';
v_address2.city := 'cd';
v_address2.state_code := '4';
v_address2.zip := 'sc';
elsif (v_address1.city ='nj') then
v_address2.line1 := '25';
v_address2.line2 := 'aq';
v_address2.city := 'aq';
v_address2.state_code := '5';
v_address2.zip := 'aq';
end if;
pipe row(v_address2);
end loop;
close p_ref_cursor;
return;
end;
/
select * from table(f_table_obj_pipelined1(cursor(select * from table(f_table_obj_pipelined()))));
红色部分提示数据类型不一致错误???????
f_table_obj_pipelined作为第一个管道表函数,f_table_obj_pipelined1作为第二个管道表函数]
请大侠们指点,谢谢