Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Funcion que devuelva un VARRAY

arzammNov 3 2014 — edited Nov 3 2014


Hola a todos,

Quisiera su apoyo, ya que trato de hacer una funcion, a la cual le paso una cadena grande y un caracter (separador)

(esta cadena contiene los meses del año  'ENERO  FEBRERO  MARZO ABRIL   MAYO  JUNIO JULIO AGOSTO SEPTIEMBRE  OCTUBRE NOVIEMBRE DICIEMBRE'

y quiero que devuelva un arreglo de VARCHARs conteniendo por separado cada mes.

Esto es lo que he hecho:

*********************

CREATE OR REPLACE PACKAGE FIRA.PAQ_FIRA AS

     TYPE VARRCHAR255  IS VARRAY(100) OF VARCHAR2(255);

     FUNCTION obt_tokens( p_list in varchar2,  p_sep in varchar2) return VARRCHAR255

END PAQ_FIRA;

*********************

CREATE OR REPLACE PACKAGE BODY FIRA.PAQ_FIRA AS

    FUNCTION obt_tokens( p_list in varchar2,  p_sep in varchar2) return VARRCHAR255

        is

            l_num    pls_integer;

            l_idx    pls_integer;

            l_list    varchar2(32767) := trim(p_list);

            l_value    varchar2(32767);

            v_arr      VARRCHAR255;

        begin

            loop

                l_num := 0;

                l_idx := instr(l_list,p_sep);

                if l_idx > 0 then

                    v_arr(l_num) := substr(l_list, 0, l_idx);

                    l_num := l_num + 1;

                    l_list := substr(l_list,l_idx+length(p_sep));               

                else

                    exit;

                end if;

            end loop;

            return v_arr;

    end obt_tokens;

END PAQ_FIRA;

**************************************

Y Este el el script que utilizo:

declare

        type VARRCHAR255  IS VARRAY(100) OF VARCHAR2(255);

        arr_meses   VARRCHAR255;

        lcadena      varchar2(250) := 'ENERO  FEBRERO  MARZO ABRIL   MAYO  JUNIO JULIO AGOSTO SEPTIEMBRE  OCTUBRE NOVIEMBRE DICIEMBRE';

begin

       arr_meses := FIRA.PAQ_FIRA.obt_tokens(lcadena, ' ');

       FIRA.PAQ_FIRA.obt_tokens(lcadena, ' ', arr_meses);     

end;

El paquete se compila sin problemas, pero al ejecutar el script anterior,  marca un error señalando que tiene argumentos de distinto tipo:

PLS-00306: wrong number or types of arguments in call to 'OBT_TOKENS'

Oyala puedan apoyarme

Gracias!

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Dec 1 2014
Added on Nov 3 2014
5 comments
2,692 views