17.05 - 例: ALTER PROCEDURE(SQL形式) - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

SQLプロシージャの使用例

このセクションの例は、以下のSQLプロシージャspAP2を参照します。

    CREATE PROCEDURE spAP2(IN  InParam  INTEGER, 
                           OUT OutParam INTEGER)
    BEGIN
       DECLARE Var1 INTEGER DEFAULT 10;
       SET OutParam = InParam + Var1 + 1;
    END;

例では、SQLプロシージャが次のようにコンパイルされたと仮定します。

    BTEQ> .COMPILE FILE = testsp.spAP2

SPLオプションは指定されていませんが、SPLはデフォルトなのでSQLプロシージャspAP2のソース テキストがデータベースに保存されます。

例: AT TIME ZONEオプションを使用したSQLプロシージャのコンパイル

この例は、SQL言語のspa_tzという名前のプロシージャでのAT TIME ZONEオプションを示します。

     ALTER PROCEDURE spa_tz
     COMPILE AT TIME ZONE LOCAL;

このオプションは、COMPILEオプションまたはCOMPILE ONLYオプションの後に続けて指定されている場合にのみ有効です。

例えば、次のリクエストは、AT TIME ZONEの指定がリクエストのCOMPILEの指定に先行しているため無効です。

     ALTER PROCEDURE spa_tz 
     LANGUAGE SQL
     AT TIME ZONE COMPILE 'gmt';

同じリクエストを適切な順序でオプションを指定すると有効になり、リクエストどおりにプロシージャを変更します。

     ALTER PROCEDURE spa_tz 
     LANGUAGE SQL
     COMPILE AT TIME ZONE 'gmt';

例: ALTER PROCEDURE文に対するセッション モードの影響

この例は、セッション モードを変更した場合のALTER PROCEDUREの動作を示しています。

これを行なうための手順は、次のとおりです。

  1. Teradataセッション モードのセッションでプロシージャspAP3をコンパイルします。
         BTEQ> .COMPILE FILE spAP3.spl
  2. セッション モードを変更します。
         .LOGOFF
         .SET SESSION TRANS ANSI
         .LOGON testsp, password
  3. ALTER PROCEDUREを実行します。
         ALTER PROCEDURE ap3 
         COMPILE;

    リクエストが失敗して、以下のメッセージが表示されます。

         *** Failure 5510 Invalid session mode for procedure execution.
         Statement# 1, Info =0

    ALTER PROCEDURE文が失敗するため、既存のバージョンのプロシージャspAP3が保持されます。

例: ALTER PROCEDURE文によるSQLプロシージャの再コンパイル、失敗する場合

この例では、もともとNO SPLオプションを指定してコンパイルしたプロシージャにALTER PROCEDUREリクエストを実行します。そのプロシージャのソース テキストは再コンパイルで使用できないため、ALTER PROCEDUREは失敗します。そのプロシージャはもともとNO SPLオプションを指定してコンパイルしており、そのため、ソース テキストがデータベースに格納されていません。

  1. プロシージャspAP2をコンパイルします。
         .COMPILE FILE spAP2.spl WITH NOSPL
  2. その属性を検査します。
         HELP PROCEDURE spAP2 ATTR;

    Vantageは次のレポートを返します。

    Transaction Semantics TERADATA          Character Set ASCII
    Platform LINUX                          Collation ASCII
    Default Character DataType UNICODE      Version Number 11
    SPL Text N                              Print Mode N
    Default Database testsp
  3. ALTER PROCEDUREリクエストを実行します。
         ALTER PROCEDURE spAP2 
         COMPILE;

    Vantageは次のレポートを返します。

         ALTER PROCEDURE spAP2 
         COMPILE;
         *** Failure 5535 No SPL source text available for 
    stored procedure 'spAP2'.

    ALTER PROCEDUREリクエストが失敗するため、既存のバージョンのプロシージャspAP2が保持されます。

例: ALTER PROCEDURE文によるSQLプロシージャの再コンパイル、成功する場合

この例は、変更されたオプションを指定してTeradata Database 13.0で作成されたSQLプロシージャを再コンパイルするための、ALTER PROCEDUREの使用について示しています。この例は、プロシージャのオリジナルの文字セットがALTER PROCEDUREでは変更されないことを示しています。

  1. HELP PROCEDUREを使用して、プロシージャの現在の属性を検査します。      
         HELP PROCEDURE spAP2 ATTR;

    Vantageは次のレポートを返します。

    Transaction Semantics TERADATA          Character Set EBCDIC
    Platform LINUX                          Collation ASCII
    Default Character DataType UNICODE      Version Number 09
    SPL Text Y                              Warning Option Y
    Default Database testsp

    Version Number 09は、そのプロシージャがTeradata Database 13.0で作成されたことを示しています。

  2. 以下のようにBTEQを使用して、セッションの文字セットをEBCDICからASCIIに変更します。
         .SET SESSION charset 'ASCII'
  3. NO SPLおよびNO WARNINGオプションを指定して、ALTER PROCEDUREリクエストを実行します。     
         ALTER PROCEDURE spAP2 
         COMPILE WITH NO SPL, NO WARNING;
  4. 変更が完了してから、再びプロシージャ属性を検査します。
    Transaction Semantics TERADATA          Character Set EBCDIC
    Platform LINUX                          Collation ASCII
    Default Character DataType UNICODE      Version Number 11
    SPL Text N                              Warning Option N
    Default Database testsp

    コンパイル時オプションは指定したとおりに変更されていますが、プロシージャの文字セットは変更されていません。Version Number 11は、プロシージャがTeradata Database 14.0にアップグレードされたことを示しています。

例: ALTER PROCEDUREによるコンパイル警告の抑止

この例は、ALTER PROCEDURE文のNO WARNINGオプションを使用して、コンパイル警告を抑止する方法を示しています。手順は次のとおりです。

  1. 新しいプロシージャspAP3を作成します。
  2. プロシージャspAP3をコンパイルします。
         REPLACE PROCEDURE testsp.spAP3 ()
         BEGIN
           DECLARE var1 INTEGER DEFAULT 07;
           SELECT ErrorCode INTO :var1 
           FROM dbc.errormsgs 
           WHERE ErrorCode = 5526;
           SET var1 = var1 + 1;
         END;
         BTEQ> .COMPILE FILE spAP3.spl 

    Vantageは次のレポートを返します。

         *** Procedure has been created 4 Errors/Warnings. 
         *** Warning: 5527 Stored Procedure Created with Warnings.
         *** Total elapsed time was 2 seconds.
           .COMPILE FILE spAP3.spl 
                                 $
         *** SQL Warning 5802 Statement is not ANSI.
         Warnings reported during compilation
         -------------------------------------------------------
         SPL5000:W(L1), W(5802):Statement is not ANSI.
         SPL5000:W(L3), W(5802):Statement is not ANSI.
         SPL5000:W(L5), W(5802):Statement is not ANSI.
         SPL5000:W(L6), W(5802):Statement is not ANSI.
         -------------------------------------------------------
  3. NO WARNINGオプションを指定して、そのプロシージャを再コンパイルします。
         ALTER PROCEDURE spAP3 
         COMPILE WITH NO WARNING;

    このリクエストが正常に実行された場合、プロシージャspAP3が再コンパイルされますが、コンパイル警告は表示されません。