Заявление ORACLE IIF
Я получаю сообщение об ошибке при записи строчки 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)
)
Пожалуйста, укажите свои данные.
Ответы
Ответ 1
Oracle не предоставляет такую функцию IIF. Вместо этого попробуйте использовать одну из следующих альтернатив:
ДЕКОД Функция:
SELECT DECODE(EMP_ID, 1, 'True', 'False') from Employee
CASE Функция:
SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
Ответ 2
Две другие альтернативы:
-
комбинация NULLIF
и NVL2
. Вы можете использовать это значение только в том случае, если emp_id
is NOT NULL
, которое находится в вашем случае:
select nvl2(nullif(emp_id,1),'False','True') from employee;
-
simple CASE
выражение (Mt.Schneiders использовал так называемое выражение CASE
)
select case emp_id when 1 then 'True' else 'False' end from employee;
Ответ 3
В 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.