2016-04-13 14 views
1

私はIP_ELEARN_PERSON.F_GET_PERSON(int, string, array)という名前のSQL関数を持っています。SQLを使用して配列を引数として持つpl/SQL関数を呼び出す方法

は、今私は、SQLの開発者から直接この機能を実行したいと私はこのように、この機能を実行しようとしています -

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 

我々はthis--

cstmt.setArray(4, new ObtainSqlArrayFromJava().returnSqlArray(
        underlyingConn, roles)); 
ようCallableStatmentのはsetArrayメソッドを使用して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にバインド変数として配列を渡すためのいくつかのJavaコードを望むなら、あなたはmy answer hereで見ることができます。あなたはそれを簡単にCallableStatementに適合させることができるはずです。

関連する問題