我在一个函数里使用decode时出错,看了下网上说decode不能用在plsql里,只能用在sql里,但我对这句话还不理解,希望大家能再指点指点:一开始是用在一个包的procedure里:
INSERT INTO HQY_SERV_47_SL
SELECT 字段1 ,
字段2 ,
CASE WHEN INSTR(SL.VALNAME,',')>1 THEN ……
WHEN …… THEN ……
ELSE DECODE(REPLACE(SL.VALNAME, 'ADSL ', ''), '下行128k', '2', '512k', '8', NULL)
END
FROM HQY_IB_SERVCHAR SL,
HQY_CRM_SERV_47 CS47
WHERE CS47.SERV_ID=SL.SERV_ID(+)这样是没有问题的,但因为case when需要多次被使用,所以我把它打包到一个function里了:
create or replace function get_valname_number(str varchar2)
return varchar2 is
V_RSTR varchar2(255);
begin
if str is null then
return null;
else
V_RSTR := CASE WHEN INSTR(SL.VALNAME,',')>1 THEN ……
WHEN …… THEN ……
ELSE DECODE(REPLACE(SL.VALNAME, 'ADSL ', ''), '下行128k', '2', '512k', '8', NULL)
END;
return V_RSTR;
end if;
end;然后在包里procedure调用这个function:
INSERT INTO HQY_SERV_47_SL
SELECT 字段1 ,
字段2 ,
GET_VALNAME_NUMBER(SL.VALNAME)
FROM HQY_IB_SERVCHAR SL,
HQY_CRM_SERV_47 CS47
WHERE CS47.SERV_ID=SL.SERV_ID(+)结果报错了:function or pseudo-column 'DECODE' may be used inside a SQL我只好把function里的decode也改成case when才行,为什么在function里使用会报错呢?plsql跟sql怎么区分?
INSERT INTO HQY_SERV_47_SL
SELECT 字段1 ,
字段2 ,
CASE WHEN INSTR(SL.VALNAME,',')>1 THEN ……
WHEN …… THEN ……
ELSE DECODE(REPLACE(SL.VALNAME, 'ADSL ', ''), '下行128k', '2', '512k', '8', NULL)
END
FROM HQY_IB_SERVCHAR SL,
HQY_CRM_SERV_47 CS47
WHERE CS47.SERV_ID=SL.SERV_ID(+)这样是没有问题的,但因为case when需要多次被使用,所以我把它打包到一个function里了:
create or replace function get_valname_number(str varchar2)
return varchar2 is
V_RSTR varchar2(255);
begin
if str is null then
return null;
else
V_RSTR := CASE WHEN INSTR(SL.VALNAME,',')>1 THEN ……
WHEN …… THEN ……
ELSE DECODE(REPLACE(SL.VALNAME, 'ADSL ', ''), '下行128k', '2', '512k', '8', NULL)
END;
return V_RSTR;
end if;
end;然后在包里procedure调用这个function:
INSERT INTO HQY_SERV_47_SL
SELECT 字段1 ,
字段2 ,
GET_VALNAME_NUMBER(SL.VALNAME)
FROM HQY_IB_SERVCHAR SL,
HQY_CRM_SERV_47 CS47
WHERE CS47.SERV_ID=SL.SERV_ID(+)结果报错了:function or pseudo-column 'DECODE' may be used inside a SQL我只好把function里的decode也改成case when才行,为什么在function里使用会报错呢?plsql跟sql怎么区分?
不过,我还想问下,如果我想在那个function里用decode的话,该怎样做呢?