1

テーブルを更新していたとき、自分のやり方は非常に面倒だと思ったので、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;
/
4

1 に答える 1

4

単純に純粋な 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 の使用は、あなたの質問に対する適切な解決策ではないと思います。
簡単なサンプルについては、こちらまたは こちらをご覧ください

于 2013-05-05T17:17:48.183 に答える