GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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

Share

You may also like...

2 Responses

  1. gioracle disse:

    Legal. Quer coisa melhor do que aprender brincando …. hehehe

  2. Sergio Willians disse:

    Obrigado Gio ! Eu realmente me divirto quando estou fazendo meus experimentos em PL/SQL. rs

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *