2013-02-09 207 views
22

一边写IIF stamtement,桌子下面给出的发言中,我得到一个错误,ORACLE IIF声明

声明:

SELECT IIF(EMP_ID=1,'True','False') from Employee; 

错误: 00907-缺少右括号

CREATE TABLE SCOTT.EMPLOYEE 
(
    EMP_ID  INTEGER       NOT NULL, 
    EMP_FNAME VARCHAR2(30 BYTE)    NOT NULL, 
    EMP_LNAME VARCHAR2(30 BYTE)    NOT NULL, 
    EMP_ADDRESS VARCHAR2(50 BYTE)    NOT NULL, 
    EMP_PHONE CHAR(10 BYTE)     NOT NULL, 
    EMP_GENDER CHAR(1 BYTE) 
) 

请提供您的意见。

+2

AFAIK ,Oracle没有IIF功能。您可以使用CASE WHEN代替:'select CASE WHEN emp_id = 1 THEN'True'ELSE'False'END from employee' – romar 2013-02-09 21:21:15

回答

40

Oracle不提供这样的IIF功能。 相反,尝试使用以下的替代品之一:

DECODE Funciton

SELECT DECODE(EMP_ID, 1, 'True', 'False') from Employee 

CASE Function

SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee 
14

其他两个选择:

  • NULLIFNVL2的组合。您只能使用这一点,如果emp_idNOT NULL,它是你的情况:

    select nvl2(nullif(emp_id,1),'False','True') from employee; 
    
  • 简单CASE expression(山SCHNEIDERS使用所谓的搜索CASE表达)

    select case emp_id when 1 then 'True' else 'False' end from employee;