Pular para o conteúdo

Brincando com STRINGs em tabelas: Maneiras eficientes de separação e organização

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

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Comentário(s) da Comunidade

Deixe um comentário

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

plugins premium WordPress