2011-06-14 21 views
6

Soy un desarrollador de Java con conocimiento limitado de Oracle PL/SQL. Por favor, hágame saber cómo pasar una matriz a una función PL/SQL en el siguiente ejemplo y cómo invocarlo.Cómo usar pasar una matriz en la función PL/SQL

CREATE OR REPLACE FUNCTION get_employees (pUserId NUMBER) 
    RETURN VARCHAR2 
IS 
    l_text VARCHAR2(32767) := NULL; 
BEGIN 
    FOR cur_rec IN (SELECT grp.NAME GROUP_NAME FROM UserGroupRole ugr, Group_ grp WHERE ugr.groupid=grp.groupid and USERID = pUserId) LOOP 
    l_text := l_text || ',' || cur_rec.GROUP_NAME; 
    END LOOP; 
    RETURN LTRIM(l_text, ','); 
END; 
/

SELECT get_employees(414091) FROM DUAL; 
+2

En el ejemplo que das, estás ingresando una identificación y obteniendo una cadena delimitada por comas. ¿Qué es lo que estás tratando de hacer? – eaolson

+0

En lugar de pasar la identificación, quiero pasar una matriz de identificadores, el tipo de devolución también debe ser una matriz de cadenas. –

+0

No podemos pasar la matriz a la función PL/SQL de Java. – gmhk

Respuesta

11

Puede crear un tipo de colección y pasar el parámetro como una instancia de ese tipo.

SQL> create type num_array as table of number; 
    2/

Type created. 

SQL> create or replace function myfun (arr_in num_array) return varchar2 is 
    2  txt varchar2(1000); 
    3 begin 
    4  for i in 1..arr_in.count loop 
    5   txt := txt || to_char(arr_in(i)) || ','; 
    6  end loop; 
    7  return txt; 
    8 end; 
    9/

Function created. 

SQL> declare 
    2 myarray num_array; 
    3 mytext varchar2(1000); 
    4 begin 
    5 myarray := num_array(); 
    6 myarray.extend(3); 
    7 myarray(1) := 1; 
    8 myarray(2) := 5; 
    9 myarray(3) := 9; 
10 dbms_output.put_line(myfun(myarray)); 
11 end; 
12/

1,5,9, 

PL/SQL procedure successfully completed. 
+0

Gracias eaolson, Como seguimiento, por favor, hágamelo saber cómo devolver una matriz. –

Cuestiones relacionadas