Java String配列をPLSQL Stored-Procedureに渡そうとしています。インターネットの検索の多くの後、私のために動作しない解決策を見つけた。SQLException:ORA-01403:配列をStoredProcedureに渡すときにデータが見つかりません
create or replace PACKAGE MYPACKAGE IS
TYPE CHAR_TABLE IS TABLE OF CHAR(06) INDEX BY BINARY_INTEGER;
PROCEDURE MYPROCEDURE(
p_strings CHAR_TABLE
);
END MYPACKAGE;
そして、ここでは、体が(また、それは重要ではありません)です: 作成または全ての まずここで私は「CHAR_TABLE」
パッケージと呼ばれるPL/SQL表を宣言したパッケージです。
OracleCallableStatement stmt = (OracleCallableStatement)oracleConnection.prepareCall("{call MYPACKAGE.MYPROCEDURE(?)}");
String[] data = { "one", "two", "three" };
Array array = oracleConnection.createOracleArray("MYPACKAGE.CHAR_TABLE", data);
stmt.setArray(1, array);
stmt.execute();
conn.commit();
conn.close();
0123:置き換えるPACKAGE BODY mypackageとは、以下のISTインターネット上で見つかった場合
PROCEDURE MYPROCEDURE(
p_strings CHAR_TABLE
) AS
BEGIN
FOR i IN 1..p_strings.COUNT
LOOP
INSERT INTO myTable (s) VALUES (p_strings(i));
END LOOP;
END MYPROCEDURE;
END MYPACKAGE;
Javaベースのコードです
しかし、問題は、私は次の例外を得ることです:
OracleCallableStatement stmt = (OracleCallableStatement)oracleConnection.prepareCall(" DECLARE var BERNHARD.MYPACKAGE.CHAR_TABLE;\n" +
"BEGIN\n" +
"\n" +
"var(1) := 'a';\n" +
"var(2) := 'b';\n" +
"MYPACKAGE.MYPROCEDURE(var);\n" +
"END;");
stmt.execute();
そして、この:私は、次のコードを試してみました(にStoredProcedureの呼び出しが動作するかどうかを確認するため)ただ、テストのために
Exception in thread "main" java.sql.SQLException: ORA-01403: no data found
ORA-06512: at "BERNHARD.MYPACKAGE", line 9
ORA-06512: at line 1
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1017)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:566)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:210)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:53)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:938)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1075)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3820)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3923)
at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:5617)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1385)
を働くしかし、Java String Arrayをストアドプロシージャの入力パラメータにバインドする最初のソリューションが必要です。それをどうすれば実現できますか?または私の間違いは何ですか?
ご使用のデータベースのバージョンとJDBCドライバのバージョンを開示してください。 – krokodilko
のOracle Database 12cのEnterprise Editionのリリース12.1.0.2.0 - 64ビットの生産 com.oracle.ojdbc ojdbc7 12.1.0.1.0 –
Veilchen4ever
あなたは、テストのためだけにCHAR(06)を変更できますサンプルの場合はvarchar2(200)、挿入の場合はsubstrを使用 – Mottor