Olá pessoal !
Hoje eu venho até vocês para demonstrar alguns procedimentos que podem ser feitos com STRINGs, em especial transformá-los em tabelas ! 🙂
Imagine que você tenha a seguinte String: ‘A’, ‘B’ e ‘C’ e gostaria de transformá-las em colunas. Existem várias maneiras de se fazer isso:
SELECT * FROM TABLE(STRINGS('A', 'B', 'C'))/ COLUMN_VALUE ----------------------- A B C
SELECT * FROM TABLE(sys.dbms_debug_vc2coll('A', 'B', 'C')) / COLUMN_VALUE ----------------------- A B C
SELECT * FROM TABLE(sys.odcivarchar2list('A', 'B', 'C')) / COLUMN_VALUE ----------------------- A B C
Todos são TYPES do tipo TABLE de VARCHAR2.
3 maneiras diferentes de se chegar ao mesmo resultado. Qual a mais performática ? Faça o seu teste !!! 🙂
Agora imagine que você receba o dado da seguinte maneira ‘190,191,192,193’. As abordagens acima não funcionariam !
Que tal se fazermos assim ?
SELECT REPLACE(REGEXP_SUBSTR(x.c1, '([[:alnum:]]*)(,|$)', 1, ROWNUM), ',') c2 FROM ( SELECT '190,191,192,193' c1 FROM dual ) x CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(x.c1, '[^,]')) + 1 / C2 --- 190 191 192 193
Com o uso de expressão regular, fica fácil separar pelo caracter ‘,’.
É isso aí pessoal ! Espero que essa simples brincadeira com STRINGs possa ser útil a vocês. Aproveitem essas idéias e “pensem fora da caixa” !
Abraço

Formado em Gestão em Tecnologia da Informação, com sólidos conhecimentos em SQL, PL/SQL, Oracle Forms, Reports e E-Business Suite (AP,AR e GL).
Foi durante 3 anos gerente de tecnologia de grande empresa do setor de saúde, e atualmente atua como Analista de Sistema Sênior na Scania Latin America e também como Diretor-fundador do GPO (Grupo de Profissionais Oracle).
Legal. Quer coisa melhor do que aprender brincando …. hehehe
Obrigado Gio ! Eu realmente me divirto quando estou fazendo meus experimentos em PL/SQL. rs