2013-02-09 32 views
22

tôi nhận được một lỗi khi viết stamtement IIF, bàn và báo cáo kết quả đưa ra dưới đây,ORACLE IIF Tuyên Bố

Bản Tuyên Bố:

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

Lỗi: 00907-thiếu parantheses đúng

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

Vui lòng cung cấp thông tin đầu vào của bạn.

+2

AFAIK , Oracle không có chức năng IIF. Bạn có thể sử dụng CASE WHEN để thay thế: 'select CASE WHEN emp_id = 1 THEN 'Đúng' ELSE 'False' END từ nhân viên' – romar

Trả lời

40

Oracle không cung cấp chức năng IIF như vậy. Thay vào đó, hãy thử sử dụng một trong các phương thức sau:

DECODE Funciton:

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

CASE Function:

SELECT CASE WHEN EMP_ID = 1 THEN 'True' ELSE 'False' END from Employee 
14

Hai lựa chọn thay thế khác:

  1. kết hợp của NULLIFNVL2. Bạn chỉ có thể sử dụng điều này nếu emp_idNOT NULL, mà nó là trong trường hợp của bạn:

    select nvl2(nullif(emp_id,1),'False','True') from employee; 
    
  2. đơn giản CASE expression (Mt. Schneider sử dụng một cái gọi là tìm kiếm CASE biểu)

    select case emp_id when 1 then 'True' else 'False' end from employee;