2016-04-13 52 views
1

我有一个名为IP_ELEARN_PERSON.F_GET_PERSON(int, string, array)的SQL函数。如何使用SQL调用具有数组作为参数的pl/SQL函数

现在我想直接从SQL Developer中运行这个功能,我试图执行这样的这个功能 -

select IP_ELEARN_PERSON.F_GET_PERSON(32433,'SOURCED',('ALL')) from dual; 

现在的问题是,当我试图执行打开了该功能我得到的以下errror -

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方法类似this--

cstmt.setArray(4, new ObtainSqlArrayFromJava().returnSqlArray(
        underlyingConn, roles)); 
从Java调用这个函数

所以我的疑问是,我曾经在查询中提到数组的权利?

我经历了许多堆栈溢出帖子,但没有任何事情是为数组写作的参数。

回答

0
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; 

如果你想传递一个数组作为绑定变量的PreparedStatement,那么你可以看看my answer here一些Java代码。你应该能够很容易地将它调整为CallableStatement

相关问题