Trabalhar sem JOINS (inserir dados em outras tabelas)

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Jeremias
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Seg, 15 Fev 2010 9:58 pm
Localização: São Paulo - SP

Amigos,

Faço um loader de Notas Fiscais/Itens onde tem vários campos em cada linhas, porém não tenho nenhum JOIN que faça a ligação para fazer o tratamento.

A regra seria seguir uma sequence das linhas e dos (códigos 452 até 454 e fechando no 455 para encerrar).

Como sou novo na área e acostumado a trabalhar só com JOINS...qual seria a lógica para pegar essas dados de 1 tabela tratadora e jogar em outras...(principalmente se nesse caso que existe vários itens para uma única NF...porém sem nenhum join ) ???

Veja o exemplo abaixo:


Seq. Cód.
---- ----
1 452--------------------- 1ª Nota Fiscal
2 453--item
3 454--detalhes
4 453--item
5 454--detalhes
6 455--item
7 454--detalhes
8 453--item
9 454--detalhes
10 453--item
11 454--detalhes
12 453--item
13 454--detalhes
14 452--------------------- 2ª Nota Fiscal
15 453--item
16 454--detalhes
17 453--item
18 454--detalhes
19 452--------------------- 3ª Nota Fiscal
20 453--item
21 454--detalhes
22 453--item
23 454--detalhes
24 455..................Fecha aqui.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Acho que nesse caso você terá que carregar todas linhas pra uma tabela e depois uma rotina PLSQL vai fazer o trabalho de percorrer essa tabela e inserir em cada lugar e fazendo o tratamento dos joins.

:-(

Isso só vai funcionar se o volume não for tão grande
ishii
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 28 Dez 2010 7:41 pm
Localização: São Paulo - SP

Olá,

Realmente só tratando com PL/SQL mesmo...

Me parece uma rotina reversa de geração de EDI.

[]s Ishii
Jeremias
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 23
Registrado em: Seg, 15 Fev 2010 9:58 pm
Localização: São Paulo - SP

Dr. Gori,

É isso mesmo que estou fazendo, já joguei tudo em uma tabela e inclui um campo com uma sequence para numerar de linhas e assim fazer o tratamento (conforme o exemplo).

O problema é que não tenho idéia de como tratar esses joins......pois só criando uma sequence de carga na rotina não bastaria.

Saberia me dizer se consigo criar uma sequence onde percorra o código 452 ao 454 e grave sequence nessas linhas......ao cair no código 452 ao 454 novamente criar outro ID e assim por diante até chegar no código 455 ???? Creio que seja a única alternativa, mas não estou conseguindo fazer.
ishii
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 28 Dez 2010 7:41 pm
Localização: São Paulo - SP

Olá,

Eu faria da seguinte forma:

1) Cursor com o texto
2) Variável com o valor da chave
3) Variável2 a ser carregada com o inicio da linha, mas apenas se for 452
4) Abrir o cursor
5) Carregar a variável com chave a ser usada (sequence ou outtro)
6) Carregar a variável2 a ser carregada com o inicio da linha, mas apenas se for 452
7) A cada linha do cursor cuja a variável2 tiver novamente o valor 452, atualizar a variável de chave
8) Alterar essa variável de chave na sua tabela (com uma coluna nova por exemplo)

Mas dá um certo trabalhinho mesmo...
[]s Ishii
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Se você já tem a tabela com os dados e uma sequencia preenchida na ordem correta, acho que dá pra fazer só com SQL... Usando algo do tipo:

START WITH codigo = 452
CONNECT BY PRIOR sequencia = sequencia+1

E aí retornar o LEVEL pra definir a sequência final...
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP
Ricardo H. Tajiri

Mas ainda assim está meio consufo o que você quer fazer... se puder exemplificar melhor talvez dê pra te ajudar da forma correta
Responder
  • Informação