ORACLE IIF声明

use*_*619 32 oracle ternary-operator iif

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

声明:

SELECT IIF(EMP_ID=1,'True','False') from Employee;
Run Code Online (Sandbox Code Playgroud)

错误:00907-错过了正确的parantheses

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)
)
Run Code Online (Sandbox Code Playgroud)

请提供您的意见.

Mt.*_*ers 59

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

DECODE Funciton:

SELECT DECODE(EMP_ID, 1, 'True', 'False') from Employee
Run Code Online (Sandbox Code Playgroud)

案例功能:

SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
Run Code Online (Sandbox Code Playgroud)


Rob*_*ijk 17

另外两种选择:

  1. 的组合NULLIFNVL2.如果你只能用这个emp_id就是NOT NULL,它是你的情况:

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

    select case emp_id when 1 then 'True' else 'False' end from employee;
    
    Run Code Online (Sandbox Code Playgroud)