Подтвердить что ты не робот

Заявление 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)
)

Пожалуйста, укажите свои данные.

4b9b3361

Ответ 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

Две другие альтернативы:

  1. комбинация NULLIF и NVL2. Вы можете использовать это значение только в том случае, если emp_id is NOT NULL, которое находится в вашем случае:

    select nvl2(nullif(emp_id,1),'False','True') from employee;
    
  2. 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.