PL / SQl вопрос, оракул 9i - PullRequest
       30

PL / SQl вопрос, оракул 9i

1 голос
/ 09 августа 2011

У нас здесь есть сценарий, в котором нам нужно вернуть автомобиль, если указанное ниже условие не соответствует действительности, и не возвращать ничего (или ноль), если его значение истинно

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

. Теперь может быть несколько значений для цвета.= красный и цветовой оттенок = что угодно ... и нам нужны только те, которые удовлетворяют обоим случаям.Вот примерные данные таблицы:

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

выходные данные должны быть car #, если условие не выполнено (мы передаем номер машины условию), и ноль или ничего, если условие истинно

любая помощь приветствуется!

Ответы [ 4 ]

2 голосов
/ 11 октября 2011

выберите автомобиль из car_list где нет (color = 'red' и color_tingle = 'light') и car = car_id;

0 голосов
/ 09 августа 2011
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 голосов
/ 10 августа 2011

Инициализировать ...

CREATE TABLE YOURTABLE ( АВТОМОБИЛЬ VARCHAR2 (20 БАЙТОВ), COLOR VARCHAR2 (20 байт), TINGE VARCHAR2 (20 байт)); ВСТАВЬТЕ В ВАШИ ЦЕННОСТИ ( 'A1', 'красный', 'свет');

ВСТАВЬТЕ В ВАШИ ВОЗМОЖНЫЕ ЗНАЧЕНИЯ («a2», «red», «dark»);

ВСТАВЬТЕ В ВАШИ ВОЗМОЖНЫЕ ЗНАЧЕНИЯ («a1», «green», «light»);

ВСТАВЬТЕ В ВАШИ ВОЗМОЖНЫЕ ЗНАЧЕНИЯ ('a3', 'blue', 'dark');

COMMIT;

ВЫБРАТЬ * ИЗ ВАШЕЙ СТОЛБЫ;

Тогда ...

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;
0 голосов
/ 09 августа 2011

Возвращается либо 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
...