ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE的DECODE函数新解

ORACLE的DECODE函数新解

原创 Linux操作系统 作者:Kenniu 时间:2019-04-21 16:15:05 0 删除 编辑

大家用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;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30193/viewspace-752306/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2002-11-29

  • 博文量
    146
  • 访问量
    133136