web-dev-qa-db-de.com

ORACLE IIF-Erklärung

Beim Schreiben der IIF-Anweisung, der Tabelle und der folgenden Anweisung wird eine Fehlermeldung angezeigt.

Aussage:

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

Error: 00907-fehlende rechte Klammern

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

Bitte geben Sie Ihre Eingaben an.

24
user1050619

Oracle bietet keine solche IIF-Funktion. Versuchen Sie stattdessen eine der folgenden Alternativen:

DECODE-Funktion :

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

CASE-Funktion :

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

Zwei andere Alternativen:

  1. eine Kombination aus NULLIF und NVL2 . Sie können dies nur verwenden, wenn emp_idNOT NULL ist. Dies ist in Ihrem Fall:

    select nvl2(nullif(emp_id,1),'False','True') from employee;
    
  2. einfacher CASE Ausdruck (Mt. Schneiders verwendete einen sogenannten durchsuchten CASE Ausdruck)

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

In PL/SQL gibt es einen Trick, um die undokumentierte OWA_UTIL.ITE-Funktion zu verwenden. 

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