ORACLE的DECODE函数新解
上一篇 / 下一篇 2013-01-08 15:45:49 / 个人分类:IT 技术
大家用Oracle的decode函数已经很熟了...
但又没有用过下面的方法,也许有的已经用过了...但我百度或者Google后,嘿,还没人发布过这样的用法..那让俺来告诉你...
比如下面一个SQL..
select decode(select line_type from table_name where line='SB' and mcno='1','PW','IF') MM from dual;
你执行的结果是什么..
系统会报错:
ORA-00936:missing expresion
于是,我想我还是没理解Decode用法的精髓呀;
于是尝试了创建了一个function
Create or replace function f_getlineType(strLine in varchar2,strMCNO in varchar2) return varchar2 as
strLineType table_name.line_type%type;
Begin
Select line_type into strLineType from table_name where line=strLine and mcno=strMCNO ;
return strLineType ;
Exception
WHEN NO_DATA_FOUND THEN
Return '';
End ;
然后接着执行下面的语句:
select decode( f_getlineType('SB','1'),'PW','IF') MM from dual;
执行成功了;
嗯传递函数和单纯SQl有什么区别呢,没有呀...于是我用括弧把这个SQL包住再执行,这会儿也成功了... select decode((select line_type from table_name where line='SB' and mcno='1'),'PW','IF') MM from dual;
噢,My God..必须用括弧.....
这是很多SQl在做为子查询引用的时候,必须做括弧,这是SQL在解析执行时必须要做的分析。…比如下面的,很简单,但有时会忘掉:
select 5*(select qana from table_name where line='SB' and mcno='1') NeedQty from dual;