将int数组从Java传递到Oracle PlSql

将int数组从Java传递到Oracle PlSql,java,arrays,oracle,jdbc,plsql,Java,Arrays,Oracle,Jdbc,Plsql,当我尝试将int的Java数组传递给oracleplsql时,我得到了一个异常。我使用文档中的示例,但对我来说,它不起作用 我正在将JDK1.8和ojdbc8用于Oracle 18 XE数据库 @测试 无效刷新(){ 试一试{ 最终驱动程序oraDriver=新的OracleDriver(); System.out.println(“驱动程序主版本为”+oraDriver.getMajorVersion()); 最终属性myProperties=新属性(); setProperty(“用户”、“

当我尝试将int的Java数组传递给oracleplsql时,我得到了一个异常。我使用文档中的示例,但对我来说,它不起作用

我正在将JDK1.8和ojdbc8用于Oracle 18 XE数据库

@测试
无效刷新(){
试一试{
最终驱动程序oraDriver=新的OracleDriver();
System.out.println(“驱动程序主版本为”+oraDriver.getMajorVersion());
最终属性myProperties=新属性();
setProperty(“用户”、“卡夫卡”);
setProperty(“密码”、“卡夫卡”);
Connection conn=oraDriver.connect(JDBC_URL,myProperties);
OracleCallableStatement procin=(OracleCallableStatement)
conn.prepareCall(“声明类型t_索引是pls_integer的pls_integer索引表;\n”+
“a_索引t_索引;\n”+
“开始\n”+
“a_索引:=?;\n”+
“结束;”
);
//关联数组绑定值
int[]值={1,2,3};
//关联数组绑定值的最大长度。此
//值定义批次的最大可能“currentLen”
//对于独立绑定,“maxLen”应该是
//与“currentLen”相同。
int maxLen=values.length;
//关联数组绑定值的实际大小
int currentLen=values.length;
//关联数组元素类型
int elemSqlType=OracleTypes.NUMBER;
//关联数组元素长度(以元素类型为例)
//是CHAR、VARCHAR或RAW。对于其他值,此值将被忽略
//类型。
int elemMaxLen=0;
//设置值
procin.setPlsqlIndexTable(1,值,
maxLen,currentLen,
elemSqlType,elemMaxLen);
//执行呼叫
procin.execute();
}
捕获(例外e){
抛出新的ConnectException(e);
}
}
这基于“访问PL/SQL关联数组”一章中的示例

下面是输出/错误文本。我没料到会有错误。解决办法是什么

C:\Ls\java\jdk1.8.0\bin\java.exe ...
Driver Major version is 18

org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: ORA-06550: Regel 4, kolom 16:
PLS-00382: Uitdrukking heeft onjuist type..
ORA-06550: Regel 4, kolom 3:
PL/SQL: Statement ignored.


    at nl.ave.kafka.connect.oracle.OracleBatchedOutputWriterTest.flush(OracleBatchedOutputWriterTest.java:230)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:675)
    at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:117)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:185)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:181)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:128)
    at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
    at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
    at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
    at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
    at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:229)
    at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:197)
    at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:211)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:191)
    at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
    at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:69)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.SQLException: ORA-06550: Regel 4, kolom 16:
PLS-00382: Uitdrukking heeft onjuist type..
ORA-06550: Regel 4, kolom 3:
PL/SQL: Statement ignored.

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:494)
    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1052)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:537)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:255)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:610)
    at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:249)
    at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:82)
    at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:924)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1136)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3640)
    at oracle.jdbc.driver.T4CCallableStatement.executeInternal(T4CCallableStatement.java:1318)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3752)
    at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4242)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1079)
    at nl.ave.kafka.connect.oracle.OracleBatchedOutputWriterTest.flush(OracleBatchedOutputWriterTest.java:227)
    ... 51 more
Caused by: Error : 6550, Position : 113, Sql = declare type t_indices is table of pls_integer index by pls_integer;
a_indices   t_indices;
begin
  a_indices := :1 ;
end;, OriginalSql = declare type t_indices is table of pls_integer index by pls_integer;
a_indices   t_indices;
begin
  a_indices := ?;
end;, Error Msg = ORA-06550: Regel 4, kolom 16:
PLS-00382: Uitdrukking heeft onjuist type..
ORA-06550: Regel 4, kolom 3:
PL/SQL: Statement ignored.

    at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498)
    ... 66 more


Process finished with exit code -1