2013-05-05 55 views
0

當我更新表格時,雖然我自己說我的方式非常麻煩,所以我儘管使用了case語句。雖然我想用一個簡單的程序來使用它,儘管那是我的問題發生的地方!不可能似乎得到它的權利。在程序中使用簡單的case語句

非常感謝幫助。

我的表:

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; 
/

回答

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; 

我不認爲甲骨文開關盒的那種用法是你的問題一個明智的解決方案。
對於一些簡單的例子,你可以看到herehere

+0

是的,我可以,但我真的想通過一個程序嘗試。就像我一樣,我的語法可能是失敗的,這就是爲什麼我要求幫助! – Ryoss 2013-05-05 17:25:07

+1

@Mohsen Heydari:據我瞭解程序,它具有檢測「贏」狀態的意義*贏*,*輸*,*繪製*。因此,也許,您可以通過刪除不明白的評論並添加原始程序名稱來改善答案。 (我會保持我的+1準備好) – Wolf 2013-11-10 13:04:15

+1

感謝4智能評論朋友;) – 2013-11-10 13:23:26