DataStageでストアドプロシージャを使用する
ストアード・プロシージャーは、プロシージャー構成と組み込み SQL ステートメントのブロックです。 データベースから既存のストアード・プロシージャーを呼び出すには、 「ステージ」タブ の 「読み取りメソッド」 または 「書き込みメソッド」 プロパティーの下の 「プロシージャーの呼び出し」 オプションを使用します。 テキスト・ボックスに独自のプロシージャー・ステートメント構文を記述するには、「プロシージャー・ステートメントの呼び出し」オプションを使用します。
サポートされるコネクター
以下のコネクターは、ストアード・プロシージャーをサポートします。 ストアード・プロシージャーは、入力リンク、出力リンク、またはその両方を持つコネクターで実行できます。
- Amazon RDS for PostgreSQL
- IBM Cloud® Databases for PostgreSQL
- IBM Db2®
- IBM® Db2 Big SQL
- IBM Db2 on Cloud
- IBM Db2 for i
- IBM Db2 Warehouse
- IBM Db2 for z/OS®
- Google BigQuery
- Microsoft Azure SQL Database
- Microsoft SQL Server
- Microsoft Azure Synapse Analytics
- Oracle
- PostgreSQL
- SAP ASE
- Snowflake
- Teradata
ソース・ステージのストアード・プロシージャー
「Add procedure return value to schema」 を選択して、プロシージャーの戻りコードとメッセージを列 ProcCode および ProcMessとしてスキーマに追加します。 出力リンクの最初の列には、コードの値が保持されます。 2 番目の列には、メッセージの値が保持されます。 「行データの転送 (Forward row data)」も選択した場合は、入力列が出力リンクの ProcCode 列および ProcMess 列の後に追加されます。
ターゲット・ステージのストアード・プロシージャー
入力データの各行に対してプロシージャーを実行するには、「行ごとにプロシージャーを実行」を選択します。 「行ごとにプロシージャーを実行」を選択しない場合、プロシージャーは最初の行に対して 1 回だけ実行されます。 デフォルトでは、「行ごとにプロシージャーを実行」が選択されています。 この手続きはSnowflakeコネクタではサポートされていません。
構文
?
を使用します。 以下の構文は、入力パラメーター @<column_name>
および出力列 ?
(両方とも括弧内) に <procedure_name>
という名前を付けてストアード・プロシージャーを呼び出します。CALL <procedure_name>(@<column_name>, ?)
? = CALL <procedure_name>('@<string_column_name>', ?)
ステージタブの一般的なソース・プロパティで、読み取りメソッド > 呼び出しプロシージャ文を選択し、プロシージャの戻り値をスキーマに追加を選択します、すると、2つのカラム(ProcCodeとProcMess)が出力スキーマの最初のカラムとして出力に追加される。
- ストアド・プロシージャをサポートするコネクタ(Microsoft SQL ServerとSAP ASEを除く)では、常に以下のステートメントを提供してください:
CALL (@column_name, ?)
- Microsoft SQL Server および SAP ASE コネクタの場合、
? =
の構文は有効で、プロシージャのリターンコードは?
に取り込まれ、出力列に送られます。 必ず次のような文章を提出する必要がある:? = CALL (@column_name, ?)
ストアドプロシージャが出力リンクだけのステージで呼ばれた場合、?
は常に出力パラメータを示します。 ストアドプロシージャが入力リンクだけのステージで呼ばれた場合、?
は常に入力パラメータを示します。
CALL <procedure_name>()
CALL <procedure_name>(?, ?)
CALL <procedure_name>(4,?)
PostgreSQLコネクタのストアド・プロシージャは、出力パラメータに複数行を返すことができません。 複数行を取得するには、代わりにユーザー定義関数のテーブルを使用する。
パラメーター値
「ステージ」タブの 「パラメーター値」 セクションで、パラメーター指定を使用して、ストアード・プロシージャーの入出力パラメーターを入出力列にマップします。 これは、データがどのカラムで返されるかを決定する。 Stage タブのパラメータ名は、ストアド・プロシージャのパラメータ名と一致している必要があります。 各パラメーター名は、単一の列にマップできます。 マッピングが提供されない場合、各カラムの出力データは、カラムが指定された順序で返されます。 入力リンクを持つコネクターには入力パラメーターがあり、出力リンクを持つコネクターには出力パラメーターがあり、入力リンクと出力リンクの両方を持つコネクターには両方があります。
- @
- パラメーターのデフォルト値。 マッピングで指定された列の値がパラメータに渡されます。
- リテラル
- 入力パラメータとして指定された定数。 定数の値が使用され、入力リンクからの値は破棄されます。
- ローカルパラメータまたはパラメータセットからのパラメータ
- パラメータセットからのパラメータには、
(#name#)
形式を使用します。 パラメータの値が使用され、入力リンクからの値は破棄されます。
各パラメータは入力カラムにマッピングされなければなりません。 例えば、 P1 は COLUMN_1 に、 P2 は COLUMN_2 にマッピングされるべきです。 パラメータマッピングはカラム定義を置き換えるものではありません。 しかし、入力リンクの値を破棄して、マーカー/リテラル列の値を使用することができます。
オプション・パラメーター
オプションのパラメータは、ストアドプロシージャにのみ使用できます。 ユーザー定義関数はオプショナル・パラメーターをサポートしていません。 ストアドプロシージャは、1つ以上のオプションのパラメータを持つことができます。 ストアド・プロシージャを呼び出す際にオプションのパラメータを省略したい場合は、Call procedure文を使用します。 ストアドプロシージャにオプションパラメータが1つ以上ある場合、すべてのオプションパラメータを出力パラメータの後に定義する必要があります。 Null値を持つオプションのパラメータは、最後にグループ化する必要がある。
- IBM Db2
- IBM Db2 Big SQL
- IBM Db2 on Cloud
- IBM Db2 for i
- IBM Db2 Warehouse
- Microsoft Azure SQL Database
- Microsoft SQL Server
- Oracle
- Snowflake
例ストアドプロシージャ 'MYSCHEMA.MYSP
には、2 つの必須入力パラメータinparam1,inparam2)、2 つのオプション入力optinparam3,optinparam4)、および 2 つの出力パラメータがあります。 Call procedure文の有効な使用例と無効な使用例を以下に示す:
有効:
CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, optinparam3, optinparam4)
この場合、optinparam3のInput値が使用され、optinparam4のデフォルト値が使用される:CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, optinparam3)
この場合、optinparam33とoptinparam4の両方のデフォルト値が使用される:CALL MYSCHEMA.MYSP(in1, in2, ?, ?)
CALL MYSCHEMA.MYSP(inparam1, inparam2, optinparam3, optinparam4, ?, ?)
CALL MYSCHEMA.MYSP(inparam1, inparam2, ?, ?, , optinparam4)
Query timeout
長時間実行される照会およびストアード・プロシージャーの場合は、 「照会タイムアウト」 プロパティーを設定して、プロシージャーが実行される秒数を制限します。 デフォルト値は 300 秒です。 600 秒より大きい値を設定した場合は、環境変数 $OSH_JOB_START_TIMEOUT
も編集して、 「照会タイムアウト」より大きい値を設定する必要があります。 このプロパティーは、 Microsoft SQL Server、 Microsoft Azure SQL Database、 IBM Db2、 IBM
Db2 Big SQL、 IBM Db2 on Cloud、 IBM Db2 for i、 IBM Db2
Warehouse、および IBM Db2 for z/OSで使用できます。
ユーザー定義関数
「プロシージャーの呼び出し」 または 「プロシージャー・ステートメントの呼び出し」 を選択すると、 「ユーザー定義関数」 を選択して、実行するユーザー定義関数を指定できます。 ユーザー定義関数は、入力パラメーターを取ることができ、単一値 (スカラー関数の場合) または値のセット (表関数の場合) のいずれかを戻します。 このプロパティは、Amazon RDS for PostgreSQL、'Db2、IBM Cloud Databases for PostgreSQL、'IBM Db2 Big SQL、IBM'Db2 on Cloud、IBM'Db2 for i、IBM'Db2 Warehouse、IBM'Db2 for z/OS、PostgreSQL、'Snowflake、およびTeradata で利用可能です。 IBMの「Db2 for z/OS」では、ユーザー定義関数はSELECT文の一部として呼び出されなければならない。 Teradataでは、マクロ型関数も利用できる。
ユーザー定義関数は、ソースモードとトランスフォームモードの両方をサポートしています。 ソース・モードでは、データはデータベースから読み込まれる。 トランスフォームモードでは、データは読み込まれ、変換され、ターゲットノードに書き込まれる。
- スカラー
- 単一の値を返す。
- 表
- テーブルを返します。
- スカラーユーザー定義関数の場合:
SELECT “Sclr_udf_name”(@arg1,@arg2,…);
- テーブル・ユーザー定義関数の場合:
SELECT * FROM “table_udf_name”(@arg1,@arg2,…);