Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AlexITWV

Transformando Colunas para Linha

Recommended Posts

Preciso automatizar um processo, onde eu tenho 200 tabelas distintas.

Cada tabela tem sua chave e para cada coluna eu gostaria de ter uma linha amarrada esta chave.

 

 

Porem, por ser 200 tabelas distintas o nome e a quantidade de colunas divergem.

 

 

Gostaria de saber se alguem já realizou um processo parecido, e se tem alguma dica.

 

select altc.TABLE_NAME, altc.COLUMN_NAME, altc.COLUMN_ID
from all_tables alt, all_tab_columns altc
where alt.table_name like '%T00%'
and alt.owner = 'BASE'
and alt.TABLE_NAME = altc.TABLE_NAME
order by 1, 3

 

Retorna Exemplo:

line table_name Column_Name Id_column

1 LEG_T0000002 DBIDOC 1
2 LEG_T0000002 DBSREC 2
3 LEG_T0000002 Contrato 3
4 LEG_T0000002 nomeCliente 4
5 LEG_T0000002 cpfCnpj 5
6 LEG_T0000002 caixaCliente 6

 

 

Atualmente eu estou passando os parametros assim para minha procedure

 

for doc in (select dbidoc id_documento,
CONTRATO || '#' || NOMECLIENTE || '#' || CPFCNPJ || '#' ||
CAIXACLIENTE || '#' || CAIXASERVICE
as conteudo
from LEG_T0000002)

 

 

Eu estou utilizando os '#' para utilizar esta função

 

for x in (SELECT COLUNA CRITERIO_PESQUISA, LINHA CONTEUDO
FROM (SELECT rownum ID_ordem,
regexp_substr(linha, separador, 1, LEVEL) linha
FROM (SELECT doc.conteudo linha, '[^#]+' separador
FROM dual)
CONNECT BY regexp_substr(linha, separador, 1, LEVEL) IS NOT NULL) CONTEUDO,
(select *
from (SELECT rownum ID_ordem,
regexp_substr(COLUNA,
separador,
1,
LEVEL) COLUNA
FROM (SELECT 'Contrato#Cliente#Cpf\Cnpj#Caixa Antiga#Caixa Service' coluna, -- Cabeçalho dos Critério
'[^#]+' separador
FROM dual)
CONNECT BY regexp_substr(COLUNA,
separador,
1,
LEVEL) IS NOT NULL) COLUNA
where COLUNA is not null) COLUNA
WHERE CONTEUDO.ID_ORDEM = COLUNA.ID_ORDEM)

 

 

Os campos em vermelho é onde eu gostaria de automatizar,

Exemplo buscar

 

Gostaria de popular estas strings automaticamente de alguma forma com o retorno do primeiro SELECT.

 

Nunca utilizei o unpivot e o pivot, mas pelo oque eu vi nos exemplos eu devo passar os valores das colunas da mesma maneira.

Eu gostaria de alguma forma por exemplo

select t.table_name from all_tables t where t.column_id = r.column_id

 

e já disponiblizasse as colunas automaticamente.

 

Obrigado

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa beleza Motta?

utilizei UNPIVOT, e fiz a string através dos ponteiros passando os nomes das colunas concatenando e no final formando um bloco.

 

Este método que você me mandou me deu uma boa base, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.