Insert de select com sequencia

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

Seguinte tenho uma tabela cujo o nome é TCONSUMO_MENSAL 5 campos.. sendo que um é um ID com uma sequencia ...
Estou tentando popular esta tabela com um select de outras 4 tabelas..
Minha duvia é a seguinte.. como inserir a sequencia na tabela usando o select...
O Ex abaixo é insert comum sem a sequencia numa tabela de 4 campos.. como colocar a sequencia no primeiro intem do insert ???

Selecionar tudo

INSERT INTO TCONSUMO_MENSAL
select DISTINCT 
       TITENS_EMPR.ID , 
       TMOV_ESTQ.EMPR_ID ,
       SUM(TMOV_ESTQ.QTDE),
       TMOV_ESTQ.DT
  FROM TMOV_ESTQ TMOV_ESTQ,
       TITENS_ESTOQUE TITENS_ESTOQUE,
       TITENS_EMPR TITENS_EMPR,
       TTP_MOV_ESTQ TTP_MOV_ESTQ
 WHERE TTP_MOV_ESTQ.ID = TMOV_ESTQ.TMVES_ID
   AND TITENS_ESTOQUE.ID = TMOV_ESTQ.ITESTQ_ID
   AND TITENS_EMPR.ID = TITENS_ESTOQUE.ITEMPR_ID
   AND (TTP_MOV_ESTQ.CONSUMO = 1)
   AND ( TMOV_ESTQ.DT between TO_DATE ('01012010','DD/MM/RRRR') AND TO_DATE (CURRENT_DATE,'DD/MM/RRRR'))
   AND (TMOV_ESTQ.EMPR_ID = 10)
group by TMOV_ESTQ.id, TITENS_EMPR.ID, TMOV_ESTQ.EMPR_ID, TMOV_ESTQ.DT ;

Exemplo de como tentei fazer e não rolou :P

Selecionar tudo

INSERT INTO TCONSUMO_MENSAL
SELECT SEQ_TCONSUMO_MENSAL.NEXTVAL FROM DUAL,
SELECT DISTINCT 
       TITENS_EMPR.ID , 
       TMOV_ESTQ.EMPR_ID ,
       SUM(TMOV_ESTQ.QTDE),
       TMOV_ESTQ.DT
  FROM TMOV_ESTQ TMOV_ESTQ,
       TITENS_ESTOQUE TITENS_ESTOQUE,
       TITENS_EMPR TITENS_EMPR,
       TTP_MOV_ESTQ TTP_MOV_ESTQ
 WHERE TTP_MOV_ESTQ.ID = TMOV_ESTQ.TMVES_ID
   AND TITENS_ESTOQUE.ID = TMOV_ESTQ.ITESTQ_ID
   AND TITENS_EMPR.ID = TITENS_ESTOQUE.ITEMPR_ID
   AND (TTP_MOV_ESTQ.CONSUMO = 1)
   AND ( TMOV_ESTQ.DT between TO_DATE ('01012010','DD/MM/RRRR') AND TO_DATE (CURRENT_DATE,'DD/MM/RRRR'))
   AND (TMOV_ESTQ.EMPR_ID = 10)
group by TMOV_ESTQ.id, TITENS_EMPR.ID, TMOV_ESTQ.EMPR_ID, TMOV_ESTQ.DT ;
PRECISO DE AJUDA
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

insert into tab1
  (campo1, campo2, campo3, campo4)
  select * from
  (select 'campo1'
    from dual),
  (select 'campo2'
    from dual),
  (select 'campo3'
    from dual),
  (select 'cam4' 
    from dual);
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Sobre a inserção com sequence, um modelo:

Selecionar tudo

INSERT INTO TABELA (SEQUENCIA, DESCRICAO)
VALUES (NOME_SEQUENCE.NEXTVAL, 'TESTE');
qualquer coisa, conta com a gente.
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

O que voces me passaram foi um insert normal com sequencia..
O que eu preciso é de o seguinte, imaginem a situação:
Tenho tabela 1,tabela 2 e tabela 3... eu consigo extrair dados do relacionamento dessas tabelas... OK até ai tudo bem..

Agora eu preciso armazenar esses dados em uma Quarta tabela, porem essa quarta tabela tem uma sequencia como chave primária..

Ou seja é um insert na quarta tabela do resultado do select das 3 tabelas, porem a Quarta tabela tem uma sequencia ...

...
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

huntercx escreveu:O que voces me passaram foi um insert normal com sequencia..
O que eu preciso é de o seguinte, imaginem a situação:
Tenho tabela 1,tabela 2 e tabela 3... eu consigo extrair dados do relacionamento dessas tabelas... OK até ai tudo bem..

Agora eu preciso armazenar esses dados em uma Quarta tabela, porem essa quarta tabela tem uma sequencia como chave primária..

Ou seja é um insert na quarta tabela do resultado do select das 3 tabelas, porem a Quarta tabela tem uma sequencia ...

...
com o que foi dito você não consegue chegar a uma solução?? tem certeza??
eu acho q você nem se deu o trabalho de tentar entender o que te foi dito.. não e possivel que você não consiga achar uma solução com isso q já foi dito

Selecionar tudo

INSERT INTO TCONSUMO_MENSAL
select * from
(SELECT SEQ_TCONSUMO_MENSAL.NEXTVAL FROM DUAL),
(SELECT DISTINCT
       TITENS_EMPR.ID ,
       TMOV_ESTQ.EMPR_ID ,
       SUM(TMOV_ESTQ.QTDE),
       TMOV_ESTQ.DT
  FROM TMOV_ESTQ TMOV_ESTQ,
       TITENS_ESTOQUE TITENS_ESTOQUE,
       TITENS_EMPR TITENS_EMPR,
       TTP_MOV_ESTQ TTP_MOV_ESTQ
 WHERE TTP_MOV_ESTQ.ID = TMOV_ESTQ.TMVES_ID
   AND TITENS_ESTOQUE.ID = TMOV_ESTQ.ITESTQ_ID
   AND TITENS_EMPR.ID = TITENS_ESTOQUE.ITEMPR_ID
   AND (TTP_MOV_ESTQ.CONSUMO = 1)
   AND ( TMOV_ESTQ.DT between TO_DATE ('01012010','DD/MM/RRRR') AND TO_DATE (CURRENT_DATE,'DD/MM/RRRR'))
   AND (TMOV_ESTQ.EMPR_ID = 10)
group by TMOV_ESTQ.id, TITENS_EMPR.ID, TMOV_ESTQ.EMPR_ID, TMOV_ESTQ.DT); 
se a sua tabela TCONSUMO_MENSAL tiver 5 campos.. acredito MUITO que isso va funcionar :shock:
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

Li e entendi muito bem na teoria deveria funcionar.. porém o Oracle não permite número de seqüência dessa forma, ... deve existir alguma forma de fazer isto.. e não é dessa que você me relatou..
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

qual erro q da?

se você fizer uma trigger usando sua sequence, você não se preocupara com o id, dai seu problema estara resolvido..

Selecionar tudo

create or replace trigger TRG_INS_TCONSUMO_MENSAL 
   before insert on TCONSUMO_MENSAL
   for each row

 begin
   SELECT SEQ_TCONSUMO_MENSAL.NEXTVAL
   INTO :new.TCONSUMO_MENSAL 
   FROM dual;
 end TRG_INS_TCONSUMO_MENSAL ;
mas já q você gosta de complicar cria uma procedure, tabela temporaria , cursor e umas 10 views
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

Pois é.. o problema que eu já peguei esse banco dessa forma.. os cara tem côco na mente.. e acham que a gente tem que fazer milagre..
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

O erro é

Erro de SQL: ORA-02287: número de seqüência não permitido aqui
burga
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Qui, 26 Nov 2009 1:05 pm
Localização: SP

Selecionar tudo

INSERT INTO TCONSUMO_MENSAL 
SELECT SEQ_TCONSUMO_MENSAL.NEXTVAL, t1.*
from (
SELECT DISTINCT
       TITENS_EMPR.ID ,
       TMOV_ESTQ.EMPR_ID ,
       SUM(TMOV_ESTQ.QTDE),
       TMOV_ESTQ.DT
  FROM TMOV_ESTQ TMOV_ESTQ,
       TITENS_ESTOQUE TITENS_ESTOQUE,
       TITENS_EMPR TITENS_EMPR,
       TTP_MOV_ESTQ TTP_MOV_ESTQ
 WHERE TTP_MOV_ESTQ.ID = TMOV_ESTQ.TMVES_ID
   AND TITENS_ESTOQUE.ID = TMOV_ESTQ.ITESTQ_ID
   AND TITENS_EMPR.ID = TITENS_ESTOQUE.ITEMPR_ID
   AND (TTP_MOV_ESTQ.CONSUMO = 1)
   AND ( TMOV_ESTQ.DT between TO_DATE ('01012010','DD/MM/RRRR') AND TO_DATE (CURRENT_DATE,'DD/MM/RRRR'))
   AND (TMOV_ESTQ.EMPR_ID = 10)
group by TMOV_ESTQ.id, TITENS_EMPR.ID, TMOV_ESTQ.EMPR_ID, TMOV_ESTQ.DT) t1;
huntercx
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 16 Set 2010 4:23 pm
Localização: RS

Yeah... tank's Man... Valeu mesmo :-o
Fechou todas agora...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 20 visitantes