2011-03-30 3 views
-1
SELECT DISTINCT(EMP.EMPLOYEEID), 
    EMP.EMPLOYEECODE, 
    EMP.EMPLOYEENAME, 
    EMP.HOMEADDRESS, 
    DESIG.DESIGNATIONNAME 
    FROM HRM_EMPLOYEE EMP, 
    COM_DESIGNATION DESIG, 
    COM_DEPARTMENT DEPT, 
    COM_COMPANY COMP, 
    HRM_EMPLOYEEDEPARTMENTS EMPDEPT, 
    USR_USERS USRS 
    WHERE EMP.EMPLOYEEID = EMPDEPT.EMPLOYEEID AND 
    EMP.DESIGNATIONID = DESIG.DESIGNATIONID AND 
    DESIG.DEPARTMENTID = EMPDEPT.DEPARTMENTID AND 
    EMP.STATUS IN (SELECT STAT STAT 
     FROM 
      (
      CASE 
      When (:status = 0) THEN 
      SELECT 1 STAT FROM dual 
      UNION ALL 
      SELECT 2 STAT FROM dual 
      else 
      Select :status STAT from dual 
      end 
     ) 
      xx 
     ) 

사실 내 요구 사항은 다음과 같습니다. 매개 변수 전달에 따라 레코드를 저장하십시오. tat 매개 변수를 모든 레코드를 표시하려면.ORA-00907 : 오른쪽 괄호 누락

+0

음, 오류가 당신이 오른쪽 괄호를 놓치고, 당신은 말한다. 쿼리의 끝에')'를 추가하십시오. – Blorgbeard

+0

마지막 문장을 완성하십시오 : "해당 매개 변수를 모든 레코드를 표시하려면 ...". 모든 레코드를 표시하려면 매개 변수의 어떤 값을 나타내야합니까? 현재 쿼리를 올바르게 작성하려고 노력할 것입니다. –

+0

그리고 정답을 표시하는 것을 잊지 마십시오. –

답변

1
SELECT DISTINCT(EMP.EMPLOYEEID), 
    EMP.EMPLOYEECODE, 
    EMP.EMPLOYEENAME, 
    EMP.HOMEADDRESS, 
    DESIG.DESIGNATIONNAME 
    FROM HRM_EMPLOYEE EMP, 
    COM_DESIGNATION DESIG, 
    COM_DEPARTMENT DEPT, 
    COM_COMPANY COMP, 
    HRM_EMPLOYEEDEPARTMENTS EMPDEPT, 
    USR_USERS USRS 
    WHERE EMP.EMPLOYEEID = EMPDEPT.EMPLOYEEID AND 
    EMP.DESIGNATIONID = DESIG.DESIGNATIONID AND 
    DESIG.DEPARTMENTID = EMPDEPT.DEPARTMENTID AND 
    ( 
    (EMP.STATUS IN (1, 2) and :status = 0) 
     or :status <> 0 --This will not filter your status, as I expect you want it to do so 
    ) 
+0

Nikhil의 쿼리에서'EMP.STATUS = : status' 부분이 누락되었습니다.'EMP.STATUS IN (이중에서 상태 STAT 선택) ' –

+0

상태가 <> 0이면 모든 레코드를 표시하려고합니다. –

+0

어쨌든 쿼리의 논리가 명확합니다. –

4

당신은 테이블 식으로 CASE 문을 가질 수 없습니다 (하지 않는 한 아마도 중첩 테이블 유형을 사용하는 경우). 그러나 왜 그렇게 복잡한가?

EMP.STATUS IN (SELECT STAT STAT 
    FROM 
     (
     CASE 
     When (:status = 0) THEN 
     SELECT 1 STAT FROM dual 
     UNION ALL 
     SELECT 2 STAT FROM dual 
     else 
     Select :status STAT from dual 
     end 
    ) 
     xx 
    ) 

쓰기이 : 대신이의

(EMP.STATUS IN (1, 2) AND :status = 0) OR 
(EMP.STATUS = :status)