2016-04-13 5 views
1

Ich habe eine SQL-Funktion mit dem Namen IP_ELEARN_PERSON.F_GET_PERSON(int, string, array).So rufen Sie eine PL/SQL-Funktion mit Array als Argument mit SQL

Jetzt möchte ich diese Funktion direkt von SQL-Entwickler laufen und ich versuche, diese Funktion wie folgt auszuführen -

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

Das Problem ist jetzt, wenn ich diese funtion auszuführen versuche ich das immer bin folgende 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 

Wir waren diese Funktion von Java-Aufruf unter Verwendung setArray Methode des CallableStatment wie this--

cstmt.setArray(4, new ObtainSqlArrayFromJava().returnSqlArray(
        underlyingConn, roles)); 

Also meine Zweifel ist, ist die Art, wie ich das Array in der Abfrage verwendet, richtig?

Ich ging durch viele Stack Overflow Posts, aber nirgendwo wurde etwas für Arrays als Argument geschrieben.

Antwort

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; 

Wenn Sie einige Java-Code wollen ein Array als Bind-Variable auf eine für das Bestehen PreparedStatement dann können Sie bei my answer here suchen. Sie sollten es leicht an eine CallableStatement anpassen können.

Verwandte Themen