Páginas

quarta-feira, 4 de novembro de 2015

[Oracle] - Trabalhando com Listas Dinâmicas


Bom pessoal, vou informar abaixo a implementação de criação e utilização de listas dinâmicas no Oracle, validas para versões 10g, 11g e 12c.

CREATE OR REPLACE TYPE t_id IS TABLE OF VARCHAR2(32000);
/

CREATE OR REPLACE
FUNCTION fnc_gera_lista(lista       VARCHAR2,
                           delimitador VARCHAR2) RETURN t_id IS
      v_id t_id;
   BEGIN
      SELECT regexp_substr(REPLACE(lista, delimitador, ','),
                           '[^,]+',
                           1,
                           LEVEL) AS lista
      BULK   COLLECT
      INTO   v_id
      FROM   dual
      CONNECT BY regexp_substr(REPLACE(lista, delimitador, ','),
                               '[^,]+',
                               1,
                               LEVEL) IS NOT NULL;
      RETURN v_id;
END;
/

----------------------------------------------
--- EXEMPLO DE UTILIZAÇÃO: ---

-- LISTA DE DADOS NUMÉRICOS --
SELECT TO_NUMBER(COLUMN_VALUE) AS LISTA
        FROM   TABLE(FNC_GERA_LISTA('22;19;30;35;40;60;71;92;', ';')); 
-- LISTA DE DADOS ALPHANUMÉRICOS --
SELECT TO_CHAR(COLUMN_VALUE) AS LISTA
        FROM   TABLE(FNC_GERA_LISTA('a;B;C;d;E;F;g;H;', ';'));

-- LISTA DE DADOS ALPHANUMÉRICOS(DATAS) --
SELECT TO_CHAR(TO_DATE(COLUMN_VALUE ,'DD/MM/YYYY'), 'DD/MM/YYYY') AS LISTA
FROM   TABLE(FNC_GERA_LISTA('15/01/2011;11/12/2010;10/10/1999;16/08/1998;01/10/2003;12/12/2012;10/10/2010;11/11/2011;',
                            ';'));


Nenhum comentário:

Postar um comentário