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の動作を示しています。
これを行なうための手順は、次のとおりです。
- Teradataセッション モードのセッションでプロシージャspAP3をコンパイルします。
BTEQ> .COMPILE FILE spAP3.spl
- セッション モードを変更します。
.LOGOFF .SET SESSION TRANS ANSI .LOGON testsp, password
- 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オプションを指定してコンパイルしており、そのため、ソース テキストがデータベースに格納されていません。
- プロシージャspAP2をコンパイルします。
.COMPILE FILE spAP2.spl WITH NOSPL
- その属性を検査します。
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
- 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では変更されないことを示しています。
- 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で作成されたことを示しています。
- 以下のようにBTEQを使用して、セッションの文字セットをEBCDICからASCIIに変更します。
.SET SESSION charset 'ASCII'
- NO SPLおよびNO WARNINGオプションを指定して、ALTER PROCEDUREリクエストを実行します。
ALTER PROCEDURE spAP2 COMPILE WITH NO SPL, NO WARNING;
- 変更が完了してから、再びプロシージャ属性を検査します。
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オプションを使用して、コンパイル警告を抑止する方法を示しています。手順は次のとおりです。
- 新しいプロシージャspAP3を作成します。
- プロシージャ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. -------------------------------------------------------
- NO WARNINGオプションを指定して、そのプロシージャを再コンパイルします。
ALTER PROCEDURE spAP3 COMPILE WITH NO WARNING;
このリクエストが正常に実行された場合、プロシージャspAP3が再コンパイルされますが、コンパイル警告は表示されません。