ストアードプロシージャー (SP) タイプの外部オブジェクト (EO) は、DBMS 内に配置された一連のストアードプロシージャーにアクセスする方法についてのすべての情報 (名前、パラメーターなど) を格納します。
このタイプの外部オブジェクトでは、複数のメソッドとそれに対応するパラメーターを定義できます。各メソッドは、DBMS で定義されているストアードプロシージャーに対応します。
Name: ストアード プロシージャー オブジェクトの名前
Description: ストアード プロシージャー オブジェクトの説明
Type: 外部オブジェクトのタイプ (ストアードプロシージャー)
Data Store: ストアードプロシージャーが定義されている DBMS を示すデータストア
Module/Folder: 外部オブジェクトが配置されているフォルダ
Object Visibility: 別のモジュール内の他のオブジェクトからのアクセシビリティ
Internal Name: ナレッジベース内のメソッドに与えられる内部名
Description: メソッドの説明
Type: メソッドが返すデータのタイプ (ある場合)
External Name: DBMS 内で定義される SP の名前
Access Type: InOut、In、Out のいずれか
Internal Name: パラメーターに与えられる内部名
Description: パラメーターの説明
Type: パラメーターのデータタイプ
External Name: SP 内で定義されるパラメーターの外部名
MySQL_SP という名前のストアード プロシージャー タイプの外部オブジェクトを作成し、&mysps という名前の MySQL_SP 変数を定義したとします。
続いて、コード内で次のように記述します:
Event 'Count'
&mysps.get_count_universidad(&count)
msg(&count.ToString())
EndEvent
count_universidad は、ストアードプロシージャーである sp_count_universidad に与えられた内部名です。パラメーターにおいて、my DB の University テーブルのエントリー番号をロードします。
注
- ストアードプロシージャーを呼び出すために必要なすべてのコードを生成するために、GeneXus はパラメータータイプおよびそのアクセスタイプを考慮して、メソッドの内部名をその外部名に、パラメーターの内部名を対応する外部名にマップします。このため、外部名は正しく定義する必要があります。さもないと、"PLS-00306: wrong number or types of arguments in call to ' ...' " などのエラーが表示される可能性があります。
- 挿入、更新、削除など、ストアードプロシージャーがデータベースを変更する場合は、Commit コマンドを明示的に使用する必要があります。次に例を示します:
Event 'Stored'
&mysps.insertData()
commit
EndEvent
アプリケーションをデプロイする際、SP が iSeries DB2 で実行中である場合は gx400dcl.exe (.net) または crtjdbccalls.class (java) ファイルを実行して SP を宣言する必要があります。詳しくは、
SAC #26620 を参照してください。
次のように、以前のバージョンと同じ方法でストアードプロシージャーを呼び出すことができます:
call('sp_count_universidad',&count)
また、データ ストア レベルにおいて外部ストアードプロシージャーの [ List ] プロパティで使用されるストアードプロシージャーのリストも宣言できます。
この呼び出しメソッドは廃止予定なので、「spc0145, 'Calling stored procedure ''%1'' in datastore ''%2'' via the call keyword is deprecated.」という警告が表示されます。
一部の複雑なデータタイプはサポートしていません。次に例を示します:
ストアードプロシージャーが RecordSet データタイプを戻す場合は、GeneXus はマップするための互換性のあるデータタイプを提供しません。
ストアードプロシージャーのメソッドの引数として null 値を使用することはできません。
ストアード関数 (Oracle) はサポートされていません。InOut パラメーターまたは Out パラメーターを指定したストアードプロシージャーを使用してください。