Java 如何使用SQL调用以数组作为参数的pl/SQL函数

Java 如何使用SQL调用以数组作为参数的pl/SQL函数,java,sql,database,oracle,plsql,Java,Sql,Database,Oracle,Plsql,我有一个名为IP\u ELEARN\u PERSON.F\u GET\u PERSON(int、string、array)的SQL函数 现在我想直接从sql developer运行这个函数,我正试图像这样执行这个函数-- 现在的问题是,当我尝试执行此功能时,我会遇到以下错误-- 我们使用CallableStation的setArray方法从java调用这个函数,如下所示-- 所以我的疑问是,我在查询中提到数组的方式对吗 我读了很多堆栈溢出的文章,但没有把数组作为参数来写 CREATE TYPE

我有一个名为
IP\u ELEARN\u PERSON.F\u GET\u PERSON(int、string、array)
的SQL函数

现在我想直接从sql developer运行这个函数,我正试图像这样执行这个函数--

现在的问题是,当我尝试执行此功能时,我会遇到以下错误--

我们使用CallableStation的setArray方法从java调用这个函数,如下所示--

所以我的疑问是,我在查询中提到数组的方式对吗

我读了很多堆栈溢出的文章,但没有把数组作为参数来写

CREATE TYPE string_list IS TABLE OF VARCHAR2(100);
/

CREATE FUNCTION F_GET_PERSON (
  id    INT,
  type  VARCHAR2,
  array string_list
) RETURN INT
AS
BEGIN
  RETURN 0;
END;
/

SELECT F_GET_PERSON( 1, 'SOURCED', string_list( 'ALL' ) )
FROM   DUAL;
如果您需要一些java代码来将数组作为绑定变量传递给
PreparedStatement
,那么您可以查看。您应该能够轻松地将其调整为
CallableStatement

如果您需要一些java代码来将数组作为绑定变量传递给
PreparedStatement
,那么您可以查看。您应该能够轻松地将其调整为
CallableStatement

,如下所述:

Oracle支持以下集合类型:关联数组、VARRAY(可变大小数组)和嵌套表

在将集合传递给函数之前,需要正确初始化集合。

如下所述:

Oracle支持以下集合类型:关联数组、VARRAY(可变大小数组)和嵌套表

在将集合传递给函数之前,需要正确初始化集合

ORA-06553: PLS-306: wrong number or types of arguments in call to 'F_GET_PERSON'
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Error at Line: 3 Column: 8
cstmt.setArray(4, new ObtainSqlArrayFromJava().returnSqlArray(
                    underlyingConn, roles));
CREATE TYPE string_list IS TABLE OF VARCHAR2(100);
/

CREATE FUNCTION F_GET_PERSON (
  id    INT,
  type  VARCHAR2,
  array string_list
) RETURN INT
AS
BEGIN
  RETURN 0;
END;
/

SELECT F_GET_PERSON( 1, 'SOURCED', string_list( 'ALL' ) )
FROM   DUAL;