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;