我在编写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)
)
请提供您的意见。
答案 0 :(得分:49)
Oracle不提供此类IIF功能。 相反,请尝试使用以下替代方法之一:
SELECT DECODE(EMP_ID, 1, 'True', 'False') from Employee
SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
答案 1 :(得分:16)
另外两种选择:
NULLIF
和NVL2
的组合。您只能在emp_id
为NOT NULL
的情况下使用此功能,这与您的情况相符:
select nvl2(nullif(emp_id,1),'False','True') from employee;
简单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.