我有一个名为 IP_ELEARN_PERSON.F_GET_PERSON(int, string, array)
的 SQL 函数。
现在我想直接从 sql Developer 运行这个函数,并且我尝试像这样执行这个函数 -
select IP_ELEARN_PERSON.F_GET_PERSON(32433,'SOURCED',('ALL')) from dual;
现在的问题是,当我尝试执行这个函数时,我收到以下错误 -
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
我们通过使用 CallableStatment 的 setArray 方法从 java 调用此函数,如下所示 -
cstmt.setArray(4, new ObtainSqlArrayFromJava().returnSqlArray(
underlyingConn, roles));
所以我的疑问是,我过去在查询中提及数组的方式正确吗?
我浏览了许多 Stack Overflow 帖子,但没有为数组编写任何内容作为参数。
最佳答案
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 代码来将数组作为绑定(bind)变量传递给 PreparedStatement
那么您可以查看 my answer here 。您应该能够轻松地将其调整为 CallableStatement
。
关于java - 如何使用 SQL 调用以数组作为参数的 pl/SQL 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599307/