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.
Oracle bietet keine solche IIF-Funktion. Versuchen Sie stattdessen eine der folgenden Alternativen:
SELECT DECODE(EMP_ID, 1, 'True', 'False') from Employee
SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee
Zwei andere Alternativen:
eine Kombination aus NULLIF
und NVL2
. Sie können dies nur verwenden, wenn emp_id
NOT NULL
ist. Dies ist in Ihrem Fall:
select nvl2(nullif(emp_id,1),'False','True') from employee;
einfacher CASE
Ausdruck (Mt. Schneiders verwendete einen sogenannten durchsuchten CASE
Ausdruck)
select case emp_id when 1 then 'True' else 'False' end from employee;
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.