CALLDBPROC(SQL)

CALLDBPROC dbproc ddm-name

 

 

 

M

[USING] parameter AD= O
      A
  [RESULT SETSresult-set]
  [GIVINGsqlcode]

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連機能グループ:データベースへのアクセスと更新


関数

CALLDBPROC ステートメントは、Natural からアクセスできる SQL データベースシステムのストアドプロシージャを呼び出すために使用します。

ストアドプロシージャは、Natural サブプログラム(DB2 for z/OS から実行されたときのみ利用できます)または Natural 以外のプログラミング言語で記述されたプログラムのいずれかです。

CALLDBPROC は、呼び出し側オブジェクトとストアドプロシージャ間のパラメータの受け渡しに加えて、"結果セット" をサポートします。結果セットはストアドプロシージャから呼び出し側オブジェクトへ、パラメータを使用するよりも大量のデータを返すことを可能にします。

結果セットは、ストアドプロシージャによって作成され、呼び出し側オブジェクトで READ RESULT SET ステートメントを使用して読み込んだり処理したりすることのできる "一時的な結果テーブル" です。

注意:
一般的に、ストアドプロシージャの呼び出しは Natural サブプログラムの呼び出しと比較されることがあります。CALLDBPROC ステートメントを実行するとき、制御はストアドプロシージャに渡され、ストアドプロシージャの処理後、呼び出し側オブジェクトに戻り、CALLDBPROC ステートメントの次のステートメントに処理が続きます。

構文説明

構文要素 説明
dbproc
呼び出すストアドプロシージャ:

dbproc として、呼び出すストアドプロシージャの名前を指定します。その名前は英数字変数または定数(アポストロフィで囲む)として指定できます。

名前はターゲットデータベースシステムのストアドプロシージャの命名規則に従う必要があります。

ストアドプロシージャが Natural サブプログラムである場合、実際のプロシージャ名は 8 文字以下である必要があります。

ddm-name
Natural データ定義モジュールの名前:

DDM の名前は、ストアドプロシージャを実行するデータベースの"アドレス"を示すように指定する必要があります。詳細については、「ddm-name」を参照してください。

[USING] parameter
渡されるパラメータ:

parameter として、呼び出し側オブジェクトからストアドプロシージャに渡されるパラメータを指定できます。parameter には次のものを使用できます。

  • ホスト変数(オプションで INDICATOR および LINDICATOR 節を使用)

  • 定数

  • キーワード NULL

詳細については、host-variable を参照してください。

AD=
属性定義:

parameterhost-variable の場合、次のようにマークできます。

AD=O

変更不可。セッションパラメータ AD=O を参照してください。

(DB2 for z/OS での対応するプロシージャ表記:IN。)

AD=M

変更可。セッションパラメータ AD=M を参照してください。

(DB2 for z/OS での対応するプロシージャ表記:INOUT。)

AD=A

入力のみ。セッションパラメータ AD=A を参照してください。

(DB2 for z/OS での対応するプロシージャ表記:OUT。)

parameter が定数の場合は、AD を明示的に指定することはできません。定数には常に AD=O が適用されます。
RESULT SETS result-set
結果セットロケータ変数用のフィールド:

result-set として、結果セットロケータを返すフィールドを指定します。

結果セットには、フォーマット/長さ I4 の変数を指定する必要があります。

結果セット変数の値は、結果セットを識別し、すぐ次の READ RESULT SET ステートメントで参照できる番号です。

result-set の値の順序は、ストアドプロシージャから返される結果セットの順序に対応します。

結果セットの内容は、次の READ RESULT SET ステートメントで処理できます。

結果セットが返されない場合は、対応する結果セット変数に 0 が含まれます。

結果セットは 1 つだけ指定できます。

GIVING sqlcode
GIVING sqlcode オプション:

このオプションは、ストアドプロシージャを呼び出す SQL CALL ステートメントの SQL コードを取得するために使用できます。

このオプションを指定し、ストアドプロシージャの SQLCODE が 0 でない場合、Natural エラーメッセージは発行されません。この場合、SQLCODE 値に対して取られる動作は、呼び出し側の Natural オブジェクト内でコード化されている必要があります。

sqlcode フィールドには、フォーマット/長さ I4 の変数を指定する必要があります。

GIVING sqlcode オプションを指定せず、ストアドプロシージャの SQLCODE が 0 でない場合は、Natural エラーメッセージが発行されます。

次の例は、ストアドプロシージャ DEMO_PROC を呼び出して、PERSON テーブルの特定範囲内の名前をすべて取得する Natural プログラムを示しています。

3 つのパラメータフィールドが DEMO_PROC に渡されます。1 番目と 2 番目のパラメータは、名前の範囲の開始値と終了値をストアドプロシージャに渡します。3 番目のパラメータは、条件に一致する名前を受け取ります。

この例では、名前は、READ RESULT SET ステートメントで処理される結果セットに返されます。

DEFINE DATA LOCAL
1 PERSON VIEW OF DEMO-PERSON
  2 PERSON_ID
  2 LAST_NAME
1 #BEGIN    (A2) INIT <'AB'>
1 #END      (A2) INIT <'DE'>
1 #RESPONSE (I4) 
1 #RESULT   (I4) 
1 #NAME (A20)
END-DEFINE

...

CALLDBPROC 'DEMO_PROC' DEMO-PERSON #BEGIN (AD=O) #END (AD=O) #NAME (AD=A)
    RESULT SETS #RESULT
    GIVING #RESPONSE
  
READ RESULT SET #RESULT INTO #NAME FROM DEMO-PERSON
    GIVING #RESPONSE
  DISPLAY #NAME
END-RESULT

...

END