Brincando com STRINGs
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
Legal. Quer coisa melhor do que aprender brincando …. hehehe
Obrigado Gio ! Eu realmente me divirto quando estou fazendo meus experimentos em PL/SQL. rs