ORACLE的DECODE函数新解

ORACLE的DECODE函数新解

上一篇 / 下一篇  2013-01-08 15:45:49 / 个人分类:IT 技术

大家用Oracledecode函数已经很熟了...

但又没有用过下面的方法,也许有的已经用过了...但我百度或者Google后,嘿,还没人发布过这样的用法..那让俺来告诉你...

 

比如下面一个SQL..

select decode(select line_type from table_name where line='SB' and mcno='1','PW','IF') MM from dual;

 

你执行的结果是什么..

系统会报错:

   ORA-00936missing 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;

猜你喜欢

转载自yaoqingqing.iteye.com/blog/1767328