ORACLE IIF声明

时间:2013-02-09 21:15:58

标签: oracle ternary-operator iif

我在编写IIF stamtement,table和下面给出的声明时遇到错误,

说明:

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)
)

请提供您的意见。

3 个答案:

答案 0 :(得分:49)

Oracle不提供此类IIF功能。 相反,请尝试使用以下替代方法之一:

DECODE Function

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

CASE Function

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

答案 1 :(得分:16)

另外两种选择:

  1. NULLIFNVL2的组合。您只能在emp_idNOT NULL的情况下使用此功能,这与您的情况相符:

    select nvl2(nullif(emp_id,1),'False','True') from employee;
    
  2. 简单CASE expression(施奈德山使用了所谓的搜索CASE表达式)

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

答案 2 :(得分:1)

在PL / SQL中,有一个技巧可以使用未公开的OWA_UTIL.ITE函数。

SET SERVEROUTPUT ON

DECLARE
    x   VARCHAR2(10);
BEGIN
    x := owa_util.ite('a' = 'b','T','F');
    dbms_output.put_line(x);
END;
/

F

PL/SQL procedure successfully completed.