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