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

标签 java sql database oracle plsql

我有一个名为 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/

相关文章:

java - 如何设置窗口始终在任何其他应用程序之上

java - 非常大的选择语句期间的 JDBC 错误 "Lost Connection"

c# - Entity Framework 在循环集合中返回 NULL

php - 当数据库中只有一个条目时,SQL 查询返回重复项

python - Mysql 不从 Aqua data studio 或 Django 返回现有行

java - 如何在 Web 托管服务器上托管 Spring Boot 应用程序

Java 模拟 FTP session

php - 用有意义的数据替换列值并在 mysql - php 中显示

database - Informix 更改 CASE WHEN eventType = 7 THEN "Logged Out"

mysql - 通过阅读进度表中的select查询计算阅读页数