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

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

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

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

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

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

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


person sandy    schedule 08.08.2011    source источник
comment
Извините, ваше описание очень запутанно. Можете ли вы расширить, добавив выходные данные и ожидаемые условия, которые будут выполняться и не выполняться?   -  person p.campbell    schedule 09.08.2011
comment
Пожалуйста, предоставьте нам больше образцов данных (т. е. ожидаемых результатов), чтобы мы могли лучше понять ваши потребности.   -  person Adriano Carneiro    schedule 09.08.2011
comment
Хорошо, я обновил исходный вопрос, в основном нам нужно, чтобы в качестве вывода был номер автомобиля, если условие не выполняется (т.е. и цвет = красный, и цветной оттенок = свет не соответствует действительности), или ноль в качестве вывода, если условие верно для данного номера автомобиля.   -  person sandy    schedule 09.08.2011


Ответы (4)


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

person Alper Celayir    schedule 11.10.2011

DECLARE
myCar VARCHAR(20);

а потом...

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

Or...

SELECT
   DECODE (color, 'red', DECODE (tinge, 'light', 'FAIL', 'PASS'), 'PASS')
FROM
   table
WHERE
   car = myCar
person Chains    schedule 08.08.2011
comment
к сожалению, это не учитывает идентификатор автомобиля в запросе - person sandy; 09.08.2011
comment
это даст вам все идентификаторы автомобилей для автомобилей, которые не светло-красные. Разве не этого ты хотел? - person Chains; 09.08.2011
comment
я также хочу передать идентификатор автомобиля, а затем проверить заявленное состояние, как указано выше. - person sandy; 09.08.2011

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

CREATE TABLE YOURTABLE (CAR VARCHAR2 (20 BYTE), COLOR VARCHAR2 (20 BYTE), TINGE VARCHAR2 (20 BYTE)); ВСТАВЬТЕ В YOURTABLE VALUES («a1», «красный», «свет»);

ВСТАВЬТЕ В YOURTABLE VALUES («a2», «красный», «темный»);

ВСТАВЬТЕ В YOURTABLE VALUES («a1», «зеленый», «светлый»);

ВСТАВЬТЕ В YOURTABLE VALUES («a3», «синий», «темный»);

СОВЕРШИТЬ;

ВЫБЕРИТЕ * ИЗ ВАШЕЙ ТАБЛИЦЫ;

Затем...

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;
person arieldelafuent3    schedule 10.08.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
person ypercubeᵀᴹ    schedule 08.08.2011
comment
вместо null можем ли мы заставить это выводить обычные строки без выбранных? - person sandy; 09.08.2011
comment
Сэнди, в своем исходном вопросе вы специально просите, чтобы запрос возвращал NULL, теперь вы хотите, чтобы он не возвращал выбранных строк? - person Ollie; 11.08.2011