以下のストアド プロシージャには検索CASE文が組み込まれています。
CREATE PROCEDURE spSample (IN pANo INTEGER, IN pName CHARACTER(30), OUT pStatus CHARACTER(50)) BEGIN DECLARE vNoAccts INTEGER DEFAULT 0; SELECT COUNT(*) INTO vNoAccts FROM Accounts; CASE WHEN vNoAccts = 0 THEN INSERT INTO Accounts (pANo, pName); WHEN vNoAccts = 1 THEN UPDATE Accounts SET aName = pName WHERE aNo = pANo; WHEN vNoAccts > 1 THEN SET pStatus = 'Total ' || vNoAccts || ' customer accounts'; END CASE; END;
上記の例では、ローカル変数vNoAcctsの値に応じて、WHEN句の該当するSET文が実行されます。
vNoAcctsの値 | 真となる条件式を持つ句 | 実行される文 |
---|---|---|
0 | 最初のWHEN句 | INSERT INTO Accounts (pANo, pName); |
1 | 2番目のWHEN句 | UPDATE Accounts SET aName = pName WHERE aNo = pANo; |
>1 | 3番目のWHEN句 | SET pStatus = ’Total’ || vNoAccts || ’customer accounts’; |
vNoAcctsの値がNULLの場合にELSE句がないと、ストアド プロシージャで実行時例外(”Case not found for CASE statement”, SQLSTATE=’20000’, SQLCODE = 7601)が発生します。ただし、この例の値設定のようにvNoAcctsをNULLに設定することはできません。