Insert com select

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

Boa noite a todos,
Sera que é possivel gerar um script onde insira valores de tabelas distintas.

Query

Selecionar tudo

insert into  EXA_LAB_SET_EXA  (cd_exa_lab,cd_set_exa,cd_bancada,sn_integracao,sn_ativo) values ?
Onde values (tabelas):
exa_lab - todos os valores de cd_exa_lab
set_Exa - todos os valores de cd_set_exa
bancada - todos os valores de cd_bancada
sn_integracao = NULL
sn_ativo = 'S'


Tentei assim mas não rodou.......

Selecionar tudo

INSERT INTO EXA_LAB_SET_EXA 
  (cd_exa_lab,cd_set_exa,cd_bancada,sn_integracao,sn_ativo) 
VALUES( 
(SELECT cd_exa_lab FROM exa_lab),
(SELECT cd_set_exa FROM SET_EXA),
(SELECT CD_BANCADA FROM bancada),
(SELECT 'NULL' FROM DUAL),
(SELECT 'S' FROM DUAL) 
)
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

cara,

você tem que fazer um JOIN entre as tabelas, do jeito que está não vai funcionar além de ser não-recomendado.
Precisa entender o relacionamento das 3 tabelas envolvidas e colocar na condiçao.

Selecionar tudo

INSERT INTO EXA_LAB_SET_EXA
  (cd_exa_lab,cd_set_exa,cd_bancada,sn_integracao,sn_ativo) 
SELECT  exa_lab.cd_exa_lab,
             SET_EXA.cd_set_exa,
             bancada.CD_BANCADA,
             'NULL' ,
             'S'
  FROM exa_lab,
           SET_EXA,
           bancada
where .................................
     ;
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

Ficou assim

Selecionar tudo

INSERT INTO EXA_LAB_SET_EXA
  (cd_exa_lab,cd_set_exa,cd_bancada,sn_integracao,sn_ativo) 
  
SELECT  exa_lab.cd_exa_lab,
             SET_EXA.cd_set_exa,
             bancada.CD_BANCADA
             ,'NULL' ,
             'S'
  FROM exa_lab,
           SET_EXA,
           bancada,
           EXA_LAB_SET_EXA
where EXA_LAB_SET_EXA.cd_exa_lab = exa_lab.cd_exa_lab (+)
and EXA_LAB_SET_EXA.cd_bancada = bancada.cd_bancada (+)
and EXA_LAB_SET_EXA.cd_set_exa = set_exa.cd_set_exa (+)
order by 1
Resultado da query:

Selecionar tudo

         1	        12	         1	NULL 	S
         2	        12	         1	NULL 	S
         3	        12	         1	NULL 	S
         4	        12	         1	NULL 	S

Porem ele esta dando erro na coluna sn_integracao

Selecionar tudo

09:35:30  ORA-12899: value too large for column "DBAMV"."EXA_LAB_SET_EXA"."SN_INTEGRACAO" (actual: 4, maximum: 1)
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

você esta atribuindo a string 'NULL' ao campo, mas aparentemente deveria estar atribuindo o valor NULL (sem aspas) ao campo...
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

aff agora tem um constraint que não me deixa executar.

Selecionar tudo

[1]: (Error): ORA-00001: unique constraint (DBAMV.EXA_LAB_SE_PK) violated
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE
att,

Daniel N.N.

NULL(vazio) tem que ser NULL sem aspas.

não sei as constraints que você precisa.
Porém pelo visto você tentou fazer o mesmo insert mais de uma vez o que gerou dados "duplicados".
Analise melhor quais são os dados e condições para não ficar tomando erro a cada passo.
Avatar do usuário
p43lo
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 26
Registrado em: Qua, 14 Jul 2010 11:35 am
Localização: vitoria es
T.I

Bom examinei minha constraint e realmente era isso mesmo por ser unique não podia inserir mais de um registro.
Obrigado.
Responder
  • Informação
  • Quem está online

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