2011-08-08 2 views
2

우리는 아래의 조건이 참이 아닌 경우 차를 반환하고 아무것도 또는 null의 진정한PL/SQL 질문, 오라클 9i의

table-> from car_list 
condition where color = red and color_tinge = light and car = ? 

지금이 할 수있는 경우를 반환하지 않도록 필요로하는 곳에 우리는 여기에 시나리오가 color = red 및 color tinge = anything ...에 대해 여러 값을 가질 수 있으며 두 경우를 모두 만족하는 값만 필요합니다. 조건이 true 인 경우 null 또는 아무것도 (우리가 조건에 차 번호를 전달하는) 조건이 true가 아닌 경우 출력 데이터가 차 #해야

 
car color color_tinge 
a1 red  light 
a2 red  dark 
a1 green light 
a3 blue dark 

: 다음은 테이블의 샘플 데이터입니다

어떤 도움을 주실 수 있나요?

+0

죄송합니다. 설명이 매우 혼란 스럽습니다. 합격/불합격되는 출력 데이터와 예상 조건을 추가하여 확장 할 수 있습니까? –

+1

귀하의 요구 사항을 더 잘 이해할 수 있도록 더 많은 데이터 샘플 (예 : 출력 자료)을 제공해주십시오. –

+0

기본적으로 우리가 출력으로 필요로하는 것은 조건이 실패한 경우 (즉, 색상 = 빨간색 및 색상 tinge = light가 true가 아닌 경우) 자동차 번호입니다. 주어진 자동차 번호에 대해 조건이 true이면 출력으로 null이됩니다. – sandy

답변

-2

car#ID 또는 NULL 중 하나를 반환합니다. 당신이 원하는 것을 정확하게 이해하는지 확신 할 수 없습니다.

SELECT 
    CASE WHEN EXISTS 
     (SELECT * 
      FROM car_list 
      WHERE color = red 
      AND color_tinge = light 
      AND car = car#ID 
     ) 
     THEN NULL 
     ELSE car#ID 
    END AS Result 
FROM dual 

이 일이겠습니까?

SELECT Result 
FROM 
    (SELECT 
     CASE WHEN EXISTS 
      (SELECT * 
       FROM car_list 
       WHERE color = red 
       AND color_tinge = light 
       AND car = car#ID 
      ) 
      THEN NULL 
      ELSE car#ID 
     END AS Result 
    FROM dual 
) tmp 
WHERE Result IS NOT NULL 
+0

null 대신에 "no rows selected"를 출력 할 수 있습니까? – sandy

+1

Sandy, origianl 질문에서 특별히 NULL을 반환하는 쿼리를 요청했습니다. 이제 "no rows selected"를 반환하겠습니까? – Ollie

0
DECLARE 
myCar VARCHAR(20); 

하고 ...

SELECT 
    car 
FROM 
    table 
WHERE 
    color != 'red' AND tinge != 'light' AND car = myCar 

또는 ...

SELECT 
    DECODE (color, 'red', DECODE (tinge, 'light', 'FAIL', 'PASS'), 'PASS') 
FROM 
    table 
WHERE 
    car = myCar 
+0

불행히도 이것은 쿼리에서 자동차 ID를 고려하지 않습니다 – sandy

+0

그것은 밝은 빨간색이 아닌 자동차에 대한 모든 차량 ID를 제공합니다. 너가 원했던 거 아닌가? – Chains

+0

나는 그것과 함께 차 id를 전달하기를 원하고 위에서 언급 한 바와 같이 명시된 조건을 확인하기를 원한다. – sandy

0

초기화 ...

TABLE YOURTABLE를 CREATE ( CAR VARCHAR2 (20 BYTE), COLOR VARCHAR2 (20 BYTE), TINGE VARCHAR2 (20 BYTE)); 사용 가능한 값 삽입 ('a1', 'red', 'light');

귀중한 가치 삽입 ('a2', 'red', 'dark');

귀중한 가치 삽입 ('a1', '녹색', '밝게');

귀중한 가치 삽입 ('a3', 'blue', 'dark');

COMMIT;

SELECT * FROM YOURTABLE; 이어서

...

SET serveroutput ON 
DECLARE 
    ret VARCHAR2(10); 
    CURSOR c_cur (p1 VARCHAR2) 
    IS 
    SELECT COUNT(1) 
    FROM YOURTABLE 
    WHERE color = 'red' 
    AND tinge = 'light' 
    AND CAR  = p1; 
BEGIN 
    OPEN c_cur('a2'); 
    FETCH c_cur INTO ret; 
    IF ret = 1 THEN 
    dbms_output.put_line('pass'); 
    ELSE 
    dbms_output.put_line('fail'); 
    END IF; 
END; 
2

선택 차 car_list 에서 여기서 하지 (컬러 = '적색'과 color_tingle = '광') 자동차 = car_id;