web-dev-qa-db-ja.com

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

入力を提供してください。

30
user1050619

Oracleは、そのようなIIF関数を提供していません。代わりに、次の代替手段のいずれかを使用してみてください。

DECODE関数

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

ケース関数

SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
54
Mt. Schneiders

他の2つの選択肢:

  1. NULLIFNVL2 の組み合わせ。 emp_idNOT NULLの場合にのみ使用できます。これはあなたの場合です:

    select nvl2(nullif(emp_id,1),'False','True') from employee;
    
  2. simple CASE expression (Mt. Schneidersはいわゆる検索CASE expression)を使用しました

    select case emp_id when 1 then 'True' else 'False' end from employee;
    
17
Rob van Wijk

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.
1
Kaushik Nayak