日期:2014-05-17  浏览次数:20898 次

DECODE 函数的简单问题
我是这样写的

UPDATE   表
TYPEID   =   DECODE(   w_typeid <0,TRUE,TYPEID,w_typeid),
....
WHERE   ....

这里就会报错
Miss   右括号
好像是expression   不对,这里的expression是不是一定要用到函数??

还有个问题:
就是:
我从表中查到这条记录,如果用户输入,我就把输入值放入更新,如果没有输入,那么还是根据原值。
所以问题是:   TYPEID   =   TYPEID可以嘛?是不是要用个work变量,先查一下,记录下来?

------解决方案--------------------
TYPEID = DECODE(sign(w_typeid-0),-1,&TYPEID,w_typeid)

=======================================================

  ·含义解释:

  decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

  该函数的含义如下:

  IF 条件=值1 THEN

  RETURN(翻译值1)

  ELSIF 条件=值2 THEN

  RETURN(翻译值2)

  ......

  ELSIF 条件=值n THEN

  RETURN(翻译值n)

  ELSE

  RETURN(缺省值)

  END IF

------解决方案--------------------
可以用CASE WHEN

------解决方案--------------------
举个例子:

SELECT ename, sal, deptno,
CASE
WHEN sal <= 500 then 0
WHEN sal > 500 and sal <1500 then 100
WHEN sal > = 1500 and sal < 2500 and deptno=10 then 200
WHEN sal > 1500 and sal < 2500 and deptno=20 then 500
WHEN sal > = 2500 then 300
ELSE 0
END "bonus "
FROM emp;
ENAME SAL DEPTNO bonus
---------- ---------- ---------- ----------
SMITH 800 20 100
ALLEN 1600 90 0
WARD 1250 30 100
JONES 2975 20 300
MARTIN 1250 30 100
BLAKE 2850 30 300
CLARK 2450 10 200