在过程中使用简单的case语句

时间:2013-05-05 16:29:24

标签: plsql case procedure

当我更新表格时,我觉得我的方式非常繁琐,所以我使用了一个案例陈述。虽然我想在一个简单的程序中使用它,虽然这就是我的问题发生的地方!似乎没有把它弄好。

非常感谢帮助。

我的表:

 drop table tbh;
 CREATE TABLE tbh ( a NUMBER, b number, c varchar2(3));
 INSERT INTO tbh VALUES( 1, '0','');
 INSERT INTO tbh VALUES( 2, '2','');
 INSERT INTO tbh VALUES( 3, '7','');

我的案例:

UPDATE tbh
SET c =
CASE WHEN a > b THEN 'W'
WHEN a < b THEN 'L'
WHEN a = b THEN 'D'
END ;

我尝试了什么:

CREATE OR REPLACE PROCEDURE WIN (IN P_WT VARCHAR2(3))
BEGIN
CASE P_WT
WHEN a > b THEN
UPDATE tbh SET c = 'W';
WHEN a < b THEN
UPDATE tbh SET c = 'L';
WHEN a = b THEN
UPDATE tbh SET c = 'D';
END CASE;
END;
/

1 个答案:

答案 0 :(得分:3)

您可以简单地使用纯SQL:

UPDATE tbh
SET c = 'W'
where a > b 

UPDATE tbh
SET c = 'L'
where a < b 

UPDATE tbh
SET c = 'D'
where a = b 

更新:Thanks to @Wolf P. for the comment

CREATE OR REPLACE PROCEDURE detectMatchResult as
BEGIN
UPDATE tbh
    SET c = 'W' -- Win
    where a > b ;

    UPDATE tbh
    SET c = 'L' -- Lose
    where a < b ;

    UPDATE tbh
    SET c = 'D' -- Draw
    where a = b; 
Commit;
END;

我不认为oracle switch case的使用对你的问题是一个明智的解决方案 对于某些简单示例,您可以看到herehere