例: 検索CASE - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLストアド プロシージャおよび埋め込みSQL

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/vqj1592443206677.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1148
Product Category
Software
Teradata Vantage

以下のストアド プロシージャには検索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に設定することはできません。