需要写一个函数,当程序传递$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;
/

解决方案 »

  1.   

    是不是问题出在特殊字符‘$’的原因,可以改用
    IF VSTR=CHA(36)||'ALL' THEN
    ..DOSOMTHING;
      

  2.   

    不是 问题是出在这句话
    insert into STYLETYPE 
    select ID from TDEFSTYLE
    应该是无法插入自定义类型。我不知道该如何操作
    我如果改成
    select id into VACCEND from tdefstyle
    就没有问题了
      

  3.   

    在程序块中,select 描述必须要有into语句搭配使用。
      

  4.   

    谢谢回答的两位
    我的目的是把TDEFSTYLE里面的id列插入到返回结果集里面
    可是不知道怎么写
      

  5.   

    返回的结果集是Return VSTYLETABLE pipelined
    这个类型的