Pessoal, beleza?
Tenho um processo de geração de arquivo txt baseado em informações da base de dados. Porém criei uma estrutura para que cada registro do arquivo txt seja gerado a partir de um objeto (procedure, function). Aí tenho o seguinte: gero todos os registros em ordem do próprio nome do registro (1, 2, A, C, enfim), ou seja, vai gerar todos os 1, todos os 2.. e assim por diante. Jogo tudo isso numa tabela, de forma desordenada, já que não sei, no momento da geração, quais serão os registros gerados, busco de uma tabela parametrizada. Até aí tudo bem, está funcionando. Depois que tenho essa tabela "suja", preciso ordenar de acordo com a estrutura hierárquica, exemplo:
reg. 1
reg. 2 (referente ao reg. 1)
reg. 1
reg. 2 (referente ao reg. 1)
reg. 3 (referente ao reg. 2)
enfim.. e aí segue...
eu tenho na tabela "suja" todos os registros 1 e os registros 2 e os registros 3 mas nenhuma referência entre eles... pensei em criar uma coluna pra armazenar o rowID do registro pai, porém isto me forçaria a sempre buscar a tabela pai ao gerar um registro filho, pra ter essa informação. Não sei se seria a melhor solução.
Alguém tem alguma idéia?
Abraços.
Ordenação de Registros Filhos com Registros Pai.
-
- Rank: Programador Júnior
- Mensagens: 18
- Registrado em: Qui, 04 Set 2008 2:01 pm
- Localização: Cravinhos - SP
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
Você precisará do código pai na sua tabela e depois é só montar uma query hierárquica usando CONNECT BY PRIOR.
Neste link você encontra detalhes de como montar a query.
http://glufke.net/oracle/viewtopic.php?t=1908
T+
Neste link você encontra detalhes de como montar a query.
http://glufke.net/oracle/viewtopic.php?t=1908
T+
-
- Rank: Programador Júnior
- Mensagens: 18
- Registrado em: Qui, 04 Set 2008 2:01 pm
- Localização: Cravinhos - SP
João, boa tarde. Utilizei o exemplo que você me passou e funcionou, porém gerou um problema:
Quando tenho vários registros-pai, o select duplicou os filhos para todos os pais, sabe me dizer o porque? não consegui encontrar um motivo.
Isso gerou alguma coisa parecida com isso:
quando era pra gerar:
Sabe porque?
Abraços.[/list]
Quando tenho vários registros-pai, o select duplicou os filhos para todos os pais, sabe me dizer o porque? não consegui encontrar um motivo.
select lpad(' ', 5*level) || t.registro as registro, level, t.link_agrupa, t.nro_ordem_nivel
from tabela_base t
start with t.registro = '0001'
connect by t.registro_pai = prior t.registro
order siblings by t.nro_ordem_nivel;
registro_pai 200
...... registro 201
...... registro 201
...... registro 202
...... registro 202
registro_pai 200
...... registro 201
...... registro 201
...... registro 202
...... registro 202
registro_pai 200
...... registro 201
...... registro 202
registro_pai 200
...... registro 201
...... registro 202
Abraços.[/list]
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
Aff... Não sei não... hehe
Mas aparentemente seu select está correto.
Talvez seja outra coisa hein...
Dá um desc na sua tabela e posta aí.
T+
Mas aparentemente seu select está correto.
Talvez seja outra coisa hein...
Dá um desc na sua tabela e posta aí.
T+
-
- Rank: Programador Júnior
- Mensagens: 18
- Registrado em: Qui, 04 Set 2008 2:01 pm
- Localização: Cravinhos - SP
Na verdade eu entendi o porque, seguinte:
os registros filhos que se repetiram têm o mesmo registro_pai, então quando o select busca os filhos daquele pai encontra todos, aí eu criei a coluna link_agrupa, que serviria (pelo menos na minha cabeça rsrs) para agrupar os registros iguais, ou seja, ele buscaria os filhos do registro pai desde que o link_agrupa dos filhos seja igual ao do pai.. mas não consegui fazer isso, entendeu?
Abraço.
os registros filhos que se repetiram têm o mesmo registro_pai, então quando o select busca os filhos daquele pai encontra todos, aí eu criei a coluna link_agrupa, que serviria (pelo menos na minha cabeça rsrs) para agrupar os registros iguais, ou seja, ele buscaria os filhos do registro pai desde que o link_agrupa dos filhos seja igual ao do pai.. mas não consegui fazer isso, entendeu?
Abraço.
-
- Rank: Analista Júnior
- Mensagens: 91
- Registrado em: Ter, 20 Mar 2007 7:19 pm
- Localização: Campinas - SP
- Contato:
Cordialmente,
João C. Garcia
João C. Garcia
Então, acho que entendi...
De qualquer forma, isso agora está sendo feito pelos campos registro e registro_pai, pk e fk respectivamente.
A query deveria ter retornado corretamente...
Abraço
De qualquer forma, isso agora está sendo feito pelos campos registro e registro_pai, pk e fk respectivamente.
A query deveria ter retornado corretamente...
Abraço
-
- Rank: Programador Júnior
- Mensagens: 18
- Registrado em: Qui, 04 Set 2008 2:01 pm
- Localização: Cravinhos - SP
Cara, consegui resolver. Criei mais um campo para utilizar com o connect by, então fiquei com uma hierarquia composta, ou seja:
1ª hierarquia
------------------
registro
registro_pai
2ª hierarquia
-----------------
rowid
rowid_pai
aí o código ficou assim:
Funcionou!
Com essa estrutura, fiz alguns testes aqui, dá eu inserir ou retirar níveis pra quaisquer pais ou filhos sem mexer no código que gerará meus arquivos, ficou show!!!
Valeu pela ajuda. Abraços!
1ª hierarquia
------------------
registro
registro_pai
2ª hierarquia
-----------------
rowid
rowid_pai
aí o código ficou assim:
start with t.registro = '0001'
connect by t.registro_pai = prior t.registro
and t.link_agrupa_pai = prior t.link_agrupa
Com essa estrutura, fiz alguns testes aqui, dá eu inserir ou retirar níveis pra quaisquer pais ou filhos sem mexer no código que gerará meus arquivos, ficou show!!!
Valeu pela ajuda. Abraços!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 1 visitante