4

PL/SQL表型のパラメータを使用してプロシージャをJDBCで呼び出す必要があります。構造体オブジェクトを試しています。しかし、私は何か正しいことをしていません。エラーが発生します:ORA-04043:オブジェクト"scott"。"objListStruct"は存在しません。

コードスニペットは次のとおりです。

conn = Application.getDBConnection();
                CallableStatement cStmt = null;
                cStmt= conn.prepareCall("{call package1.procedure1"+"(?)}");
                Struct objListStruct = conn.createStruct("objListStruct",
                                objNameArr.toArray());
                cStmt.setObject(1, objListStruct,Types.STRUCT);

パラメータ「?」この手順の場合、タイプは次のとおりです。

TYPE t_name IS TABLE OF TABLE1.name%TYPE

この作業を行うための洞察は高く評価されています。ありがとう

4

2 に答える 2

2
String[] varStrArr = varArr.toArray(new String[compNameArr.size()]);
OracleCallableStatement cStmt = (OracleCallableStatement) 
conn.prepareCall("BEGIN SCHEMA.PACKAGE.procedure(?);END;");
cStmt.setPlsqlIndexTable(1,varStrArr,varStrArr.length,varStrArr.length,
                        OracleTypes.VARCHAR, 50);
cStmt.execute();

上記のコードは機能します。その他の参考資料は、次の場所にあります 。IN パラメータのバインド

于 2012-06-01T13:06:52.513 に答える
1

2つのこと:

1) 最も簡単な方法は、プロシージャに何も渡さないことです。グローバル一時テーブルを作成し、必要なすべてのデータを挿入してから、一時テーブルから読み取るプロシージャを呼び出します。接続を自動コミットしないように注意してください。

2)配列を渡す必要ある場合は、ドロップダウンして Oracle Array タイプを使用する必要があります。Oracle 配列型はテーブル型にバインドされます。したがって、これに似たもの(注:コードはテストされていません!):

Object[] arrayObject = { x, y };

ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(
        "MY_SCHEMA.MY_ARRAY_TYPE", conn);
ARRAY myArray = new ARRAY(descriptor, conn, arrayObject);


CallableStatement cs = conn
        .prepareCall("{ call package1.procedure1(?)}");
cs.setArray(1, myArray);
cs.execute();
conn.close();
于 2012-05-23T00:59:07.427 に答える