当我更新表格时,我觉得我的方式非常繁琐,所以我使用了一个案例陈述。虽然我想在一个简单的程序中使用它,虽然这就是我的问题发生的地方!似乎没有把它弄好。
非常感谢帮助。
我的表:
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;
/
答案 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的使用对你的问题是一个明智的解决方案 对于某些简单示例,您可以看到here或here