2013-02-09 238 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;