SQL - 比解码更简单的功能

时间:2011-03-02 11:40:50

标签: oracle plsql decode

我正在使用pl / sql过程。我有一个初始化变量myvar,我想检查它的值:如果它不包含'Z',我希望它包含'P'。

我目前正在这样做:

myvar := decode(myvar,'Z','Z','P');

我只是想知道是否有更简单的方法来做到这一点。我的意思是,解码已经很简单,但我觉得在变量已经存在的时候指定变量的内容很奇怪!

如果存在这样的功能,它将如下所示:

Function myfunction(a In Varchar2, b In Varchar2, c In Varchar2) 
Return Varchar2 
Is               
Begin
      if a <> b
      then
           return c;
      end if;
      return a;
End myfunction; 

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:11)

没有内置功能完全符合您的要求。

你可以使用CASE而不是DECODE:

CASE myvar WHEN 'Z' THEN 'Z' ELSE 'P' END

虽然它没有缩短!

答案 1 :(得分:2)

将你的这个功能放到程序的声明部分并使用它!

答案 2 :(得分:1)

我同意最好的选择是使用CASE表达式:

CASE myvar WHEN 'Z' THEN 'Z' ELSE 'P' END

如果您对DECODE感到满意,另一种方法是运行此查询:

SELECT decode(myvar,'Z','Z','P') 
  INTO myvar
  FROM DUAL;

答案 3 :(得分:0)

要回答原来是否有更简单方法的问题,还有:

if myvar <> 'Z' then 
  myvar := 'P'
end if;