48

在编写 IIF 语句、表格和下面给出的语句时出现错误。

陈述:

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

桌子:

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

错误:

00907-缺少右括号

请提供您的意见。

4

3 回答 3

75

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

解码功能

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

案例功能

SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
于 2013-02-09T21:31:44.893 回答
23

其他两种选择:

  1. NULLIF和的组合NVL2。你只能使用这个 if emp_idis NOT NULL,在你的情况下:

    select nvl2(nullif(emp_id,1),'False','True') from employee;
    
  2. 简单CASE表达式(Mt. Schneiders 使用所谓的搜索CASE表达式)

    select case emp_id when 1 then 'True' else 'False' end from employee;
    
于 2013-02-10T08:40:07.843 回答
0

在 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.
于 2018-08-01T16:55:11.770 回答