2017-06-06 16 views
0

Camel SQLストアド・コンポーネントを介してストアド・プロシージャをコールするときに、Oracleユーザー定義オブジェクト型を使用する方法の例はありますか? Camelのドキュメント(http://camel.apache.org/sql-stored-procedure.html)には、組み込みのデータ型を使用した例しかありません。ここでApache Camel SQL-STOREDコンポーネントでのOracleユーザー定義オブジェクト型の使用

は私の詳細は以下のとおりです。

私は、次の手順を呼び出すしようとしています:

PROCEDURE get_eco_record(
     p_instance_id IN NUMBER, 
     p_inparm IN InParm_rec, 
     p_error_cd OUT NUMBER, 
     p_error_message OUT VARCHAR2) 

これはInParm_recオブジェクト型の定義は次のとおりです。

CREATE OR REPLACE TYPE InParm_rec 
AS 
    object 
    ( 
    part_no VARCHAR2(75 BYTE) , 
    part_type VARCHAR2(100 BYTE) , 
    eff_date DATE, 
    sub_name VARCHAR2(100), 
    rec_type VARCHAR2(1) 
    ); 
+0

私はそうは思わない。そのオラクル・タイプにマップする方法がわからないのですか?どのようにプレーンJavaコードでそれを行うのですか?たぶん何かをカスタムタイプにフックするためにラクダに追加することができます –

+0

java.sql.Struct(https://docs.oracle.com/cd/B28359_01/java.111/b31224/oraoot.htm)で動作するかどうか データ型名前はSTRUCT –

答えて

0

私はあなたの要件に基づいてプルリクエストhttps://github.com/apache/camel/pull/1749をオープンしました。

+0

拡張機能をお寄せいただきありがとうございます。私はテストし、素晴らしい作品です。 –

0

一部を掘り後答えは "いいえ"です。しかし、拡張はかなり単純であるべきです。カスタムデータ型を使用する場合、各SqlParameterの宣言には、少なくとも3つのパラメータ(parameter_name、Oracle_type、およびcustom_data_type_name)が必要です。 - コンポーネントがここにコードがあるクラス

org.apache.camel.component.sql.stored.TemplateStoredProcedure 

でプロシージャのパラメータを宣言している手順コンポーネントストアドバックキャメルSQLに行く

declareParameter(new SqlParameter("p_instance_id", OracleTypes.INTEGER)); 
     declareParameter(new SqlParameter("p_inparm",OracleTypes.ARRAY, "InParm_rec")); 
     declareParameter(new SqlOutParameter("p_error_cd", OracleTypes.INTEGER)); 
     declareParameter(new SqlOutParameter("p_error_message", OracleTypes.VARCHAR)); 

次のように私の例では、属性の宣言がなければなりませんプロシージャのパラメータの宣言を処理スニペット:

for (Object parameter : template.getParameterList()) { 
    if (parameter instanceof InputParameter) { 
     InputParameter inputParameter = (InputParameter) parameter; 
     declareParameter(new SqlParameter(inputParameter.getName(), inputParameter.getSqlType())); 
     inputParameterList.add(inputParameter); 

    } else if (parameter instanceof OutParameter) { 
     OutParameter outParameter = (OutParameter) parameter; 
     declareParameter(new SqlOutParameter(outParameter.getOutValueMapKey(), outParameter.getSqlType())); 
     setFunction(false); 
    } 
} 

コードは、現在、2つのパラメータのみ(PARAMETER_NAME、Oracle_type)をサポートします。 3番目のパラメータ(custom_data_type_name)を追加するには、コードを拡張する必要があります。追加パラメータは、STRUCT、DISTINCT、JAVA_OBJECT、名前付き配列型などのユーザー名付きの型に適用する必要があります。

「スケール」は、NUMERICおよびDECIMALデータ型に適用できる「スケール」です。

ベスト・アプローチは、org.springframework.jdbc.core.SqlParameterクラスとorg.springframework.jdbc.core.SqlOutParameterクラスを検査し、すべてのオプションをサポートするようにCamel Sql-Storedを拡張することです。

関連する問題