Oracle ストアドプロシージャ Fetcher の使用方法
ここでは、Oracle ストアドプロシージャ Fetcher を使用してストアドプロシージャを作成および呼び出すステップバイステップガイドです。
手順
SDK プロジェクトの構成:
新しいストアドプロシージャ SDK プロジェクトを作成します。
データベース型を Oracle JDBC に設定します。
バックエンド資格証明を入力し、[終了] を押します。
注意: バックエンドユーザーは、新しいスキーマオブジェクト、ストアドプロシージャ、パッケージなどの作成に必要なその他の特権に加えて、DBA ロール /「GRANT SELECT ANY DICTIONARY TO ユーザー」が必要です。
ストアドプロシージャ Fetcher を使用したストアドプロシージャエンティティの作成 - 簡単な使用ケース
この使用ケースは、VHARCHAR、INT、BLOB、FLOAT、スキーマオブジェクトなど、JDBC SQL タイプによってサポートされている出力パラメータを返すストアドプロシージャを説明します。このケースでは、ラッパーなしで直接ストアドプロシージャを呼び出しできます。
SDK プロジェクト→ OpenLegacy → Import Oracle ストアドプロシージャのインポートの順に右クリックします。
[メタデータをフェッチ] をクリックします。
[データベーススキーマ] コンボボックスを使用して、要求されたスキーマを選択します。
データベースパッケージを設定し、[ストアドプロシージャ] を選択します。
必要に応じて、[JUnit テストを生成] にチェックを入れ、[OK] を押します。
ストアドプロシージャ Fetcher を使用したストアドプロシージャエンティティの作成 - 複雑な使用ケース
この使用ケースでは、 Record
など、JDBC SQL タイプによってサポートされていない出力パラメータを返すストアドプロシージャを説明します。
このケースでは、ラッパーが自動的に生成されるため、データベースに追加する必要があります。
エンティティがストアドプロシージャラッパーを呼び出します。
SDK プロジェクト→ OpenLegacy → Import Oracle ストアドプロシージャのインポートの順に右クリックします。
[メタデータをフェッチ] をクリックします。
[データベーススキーマ] コンボボックスを使用して、要求されたスキーマを選択します。
データベースパッケージを設定し、[ストアドプロシージャ] を選択します。
必要に応じて、[JUnit テストを生成] にチェックを入れ、[OK] を押します。
エンティティがSdkProject/src/main/resources/wrappers
フォルダにあるラッパー SQL スクリプトと一緒に生成されます。ラッパーコードをターゲットパッケージにコピーし、(データベースに)コンパイルします。
ラッパーコード例
/*Compile types*/
CREATE TYPE DEMO.REC_EMPLOYEE_OBJ AS OBJECT (
EMPLOYEE_ID NUMBER,
FIRST_NAME VARCHAR2(20),
SALARY NUMBER,
CONSTRUCTOR FUNCTION REC_EMPLOYEE_OBJ RETURN SELF AS RESULT
);
/
/*Compile types*/
/*Add procedure signature to package and compile*/
PROCEDURE GET_EMPLOYEE_BY_ID_WR(EMP_ID IN NUMBER, STATUS_CODE OUT VARCHAR2, EMPLOYEE OUT DEMO.REC_EMPLOYEE_OBJ);
/*Add procedure signature to package and compile*/
/*Add procedure wrapper & init functions to package body and compile*/
FUNCTION INIT(PARAM IN DEMO.TEST.REC_EMPLOYEE) RETURN DEMO.REC_EMPLOYEE_OBJ
IS
RES DEMO.REC_EMPLOYEE_OBJ;
BEGIN
RES := DEMO.REC_EMPLOYEE_OBJ(
PARAM.EMPLOYEE_ID,
PARAM.FIRST_NAME,
PARAM.SALARY
);
RETURN RES;
END;
PROCEDURE GET_EMPLOYEE_BY_ID_WR(EMP_ID IN NUMBER, STATUS_CODE OUT VARCHAR2, EMPLOYEE OUT DEMO.REC_EMPLOYEE_OBJ)
IS
EMPLOYEE_ORIG DEMO.TEST.REC_EMPLOYEE;
BEGIN
DEMO.TEST.GET_EMPLOYEE_BY_ID(EMP_ID, STATUS_CODE, EMPLOYEE_ORIG);
EMPLOYEE := INIT(EMPLOYEE_ORIG);
END;
/*Add procedure wrapper & init functions to package body and compile*/
ラッパーが実装されたターゲットへの実行アクションを設定します。
以下のようにパスを設定します。SCHEMA_NAME.PACKAGE_NAME.STORED_PROCEDURE_NAME