PL / SQl问题,oracle 9i

时间:2011-08-08 22:27:04

标签: sql plsql oracle9i

我们在这里有一个场景,如果下面的条件不是真的我们需要返回汽车而不返回任何东西(或者如果真的那么返回null)

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

现在可以有多个值为color = red和color tinge = anything ......我们只需要满足两种情况的值。 以下是该表的示例数据:

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

如果条件不正确,输出数据应为car#(我们正在通过 汽车编号为条件)如果条件为真,则为null或无;

任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:2)

选择汽车 来自car_list 哪里   不是(color ='red'和color_tingle ='light')   和car = car_id;

答案 1 :(得分: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

答案 2 :(得分:0)

...初始化

  

创建表格你的表格(       CAR VARCHAR2(20 BYTE),       COLOR VARCHAR2(20 BYTE),       TINGE VARCHAR2(20 BYTE));插入到您的价值观中   ( 'A1', '红色', '光');

     

插入您的价值观('a2','红色','黑暗');

     

插入您的价值观('a1','绿色','亮');

     

插入您的价值观('a3','蓝色','黑暗');

     

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;

答案 3 :(得分:-2)

这将返回car#IDNULL。不确定我是否理解你想要的东西。

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