【问题标题】:How to call a pl/SQL functuion having array as an argument using SQL如何使用 SQL 调用具有数组作为参数的 pl/SQL 函数
【发布时间】:2016-08-04 14:27:54
【问题描述】:

我有一个名为 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 帖子,但没有为数组写任何东西作为参数。

【问题讨论】:

    标签: java sql database oracle plsql


    【解决方案1】:
    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,那么您可以查看my answer here。您应该能够轻松地将其调整为 CallableStatement

    【讨论】:

      【解决方案2】:

      如此处所述:

      http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS00501

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        相关资源
        最近更新 更多