需要写一个函数,当程序传递$ALL的时候,我需要从另外一张表里面查值,然后返回,当程序传递的是字符串的时候('11,22,33,'),我需要拆解字符串,插入表,然后返回。
参考这里的例子,我写了拆解字符串的,没有问题,可是$ALL加上了之后,就不行了
请大家帮帮忙
我现在写的是这样的
create or replace type STYLETYPE as object
(TDEFSTYLEID NUMBER(10))
/
create or replace type VSTYLETABLE as table of STYLETYPE
/
create or replace function FGETSTYLE(TDEFSTYLEID VARCHAR2)
Return VSTYLETABLE pipelined
is
VSTR varchar2(30000) := TDEFSTYLEID;
VDEFSTYLEID varchar2(100);
VACCEND pls_integer;
begin
IF VSTR='$ALL' THEN
insert into STYLETYPE
select ID from TDEFSTYLE
;
ELSE
loop
VACCEND := instrb(VSTR,',');
exit when (VACCEND=0 or VSTR is null);
VDEFSTYLEID := substrb(VSTR,1,VACCEND);
VSTR := substrb(VSTR,VACCEND+1,LENGTH(VSTR)-LENGTH(VDEFSTYLEID));
pipe row(STYLETYPE(rtrim(VDEFSTYLEID,',')));
end loop;
END IF;
return;
end FGETSTYLE;
/
参考这里的例子,我写了拆解字符串的,没有问题,可是$ALL加上了之后,就不行了
请大家帮帮忙
我现在写的是这样的
create or replace type STYLETYPE as object
(TDEFSTYLEID NUMBER(10))
/
create or replace type VSTYLETABLE as table of STYLETYPE
/
create or replace function FGETSTYLE(TDEFSTYLEID VARCHAR2)
Return VSTYLETABLE pipelined
is
VSTR varchar2(30000) := TDEFSTYLEID;
VDEFSTYLEID varchar2(100);
VACCEND pls_integer;
begin
IF VSTR='$ALL' THEN
insert into STYLETYPE
select ID from TDEFSTYLE
;
ELSE
loop
VACCEND := instrb(VSTR,',');
exit when (VACCEND=0 or VSTR is null);
VDEFSTYLEID := substrb(VSTR,1,VACCEND);
VSTR := substrb(VSTR,VACCEND+1,LENGTH(VSTR)-LENGTH(VDEFSTYLEID));
pipe row(STYLETYPE(rtrim(VDEFSTYLEID,',')));
end loop;
END IF;
return;
end FGETSTYLE;
/
IF VSTR=CHA(36)||'ALL' THEN
..DOSOMTHING;
insert into STYLETYPE
select ID from TDEFSTYLE
应该是无法插入自定义类型。我不知道该如何操作
我如果改成
select id into VACCEND from tdefstyle
就没有问题了
我的目的是把TDEFSTYLE里面的id列插入到返回结果集里面
可是不知道怎么写
这个类型的