入力/出力パラメータを指定するためのルール - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

CALL文では、入力パラメータと出力パラメータからなる呼び出し引数を指定しなければなりません。プロシージャの作成時にパラメータのデフォルト値を定義できません。このため、必要な呼出し引数を指定しない場合は、CALLがエラーを返します。

パラメータの引数に適用されるルールは、次のとおりです。
  • CALL文に指定する呼び出し引数の数は、呼び出すプロシージャ内のパラメータの数と等しくなければなりません。

    呼び出すプロシージャにパラメータがない場合は、呼び出し引数を指定できません。

  • IN、INOUT、OUT引数は、呼び出すプロシージャのIN、INOUT、OUTパラメータにそれぞれ対応していなければなりません。
  • INOUTパラメータの入力値のデフォルト データ型は、実行時にINOUTパラメータに渡されるデータを格納できる最も狭い型によって決まります。プロシージャを作成したCREATE PROCEDURE(外部またはSQL形式)文でパラメータに対して定義されているデフォルト型ではありません。
    INOUTパラメータに渡される出力値のサイズがそのパラメータの入力値から派生したデフォルト データ型の容量を超えたときにメモリ オーバフロー エラーが発生しないようにするには、次のいずれかの予防策をとる必要があります。
    • CALL文で明示的にINOUTパラメータのデータ型をキャストして、メモリ オーバーフロー エラーが発生しないようにする。

      例えば、次のCALL文を実行した場合、INOUTパラメータへの入力値を格納できる最も小さいデータ型はSMALLINTであることがシステムによって決定されます。SMALLINTには2バイト必要です。システムは、プロシージャの作成時に割り当てられたデータ型に関係なく、パラメータにSMALLINT型を割り当てます。

           CALL my_proc(32767);

      ただし、呼び出しでINOUTパラメータに32,768以上の値が返された場合は、プロシージャの作成時にパラメータに割り当てられた型または最低でもINTEGERにキャストしない限り、文はアボートされます。INTEGER型には最大2,147,483,647の正の値を格納でき、BIGINT型には最大9,223,372,036,854,775,807の正の値を格納でき、DECIMAL/NUMERIC型にはさらに大きな値を格納できます。詳細については、<SQLデータ型およびリテラル>および<Database Design>を参照してください。例えば、次のように文を書き換えることができます。

           CALL my_proc (CAST('32767' AS INTEGER));
    • 適切な型変換が実行されるように、呼び出し側のアプリケーションを記述します。JDBCの例については、例: INOUTパラメータでのメモリ オーバーフロー エラーの防止の例4を参照してください。

      詳細については、Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184のCREATE PROCEDURE(外部形式)またはCREATE PROCEDURE(SQL形式)を参照してください。

      INOUTパラメータのデフォルト データ型が確実に値を格納できるようにするか、メモリ オーバーフロー エラーが発生しないようにするためにキャスト先のデータ型を特定する必要があります。リテラルのサイズを特定する方法の詳細については、Teradata Vantage™ - データ タイプおよびリテラル、B035-1143を参照してください。

  • CALLをさまざまなクライアント ユーティリティから実行する場合は、さらにいくつかのルールと制約事項が適用されます。固有のルールおよび制約については、以下を参照してください。
  • INパラメータには入力のみ、OUTパラメータには出力のみを設定できます。INOUTパラメータの場合は、入力と出力の両方を設定できます。
  • 呼び出し引数のデータ型は、呼び出すプロシージャ内の対応するパラメータのデータ型と互換性がなければなりません。
  • 呼び出したプロシージャ内の対応するINまたはINOUTパラメータにNULL値を代入するために、NULLの値式を使用できます。
  • プロシージャが正常に実行された場合、成功応答内のACTIVITY_COUNTは以下の値に設定されます。
ACTIVITY_COUNTの設定 プロシージャの内容
1 出力(INOUTまたはOUT)パラメータ。
0 出力パラメータなし