alterar dado de uma tabela com dados de outra

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
nanadomg
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sex, 22 Out 2010 11:04 am
Localização: rj

bom o problema e o seguinte tenho que alterar o dado de uma tabela com os dados de outra e não estou conseguindo aparece a mensagem de "comando SQL não encerrado corretamente, ai vai o meu sql

Selecionar tudo

UPDATE TB_1 SET data_1 = TB_2.data_2
FROM TB_2 
where TB_1.cod=TB_2.cod 
and TB_2.data_2<TB_1.data_1 
and TB_2.seq=1 
and TB_1.cod='11111111'
/
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

da uma olhada aqui
nanadomg
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sex, 22 Out 2010 11:04 am
Localização: rj

amigo vlw pela dica mas nenhum dos sql mostrado no topico deu certo, pois para eu atualizar não basta somente o cod da tb_1 ser igual ao cod da TB_2.


eu quero atualizar a data_1 da TB_1 com o valor da data_2 da TB_2

quando o valor da Data_2 for menor que da data_1 a data_2 tem que ser da sequencia = 1 (pois para o mesmo cod tenho varias fichas com o mesmo cod) e de um codigo específico mencionado
nanadomg
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 3
Registrado em: Sex, 22 Out 2010 11:04 am
Localização: rj

Exemplo

TB_1

Selecionar tudo

cod       data_1
1          20/01/2010
2          12/02/2009
3          13/06/2008

TB_2

Selecionar tudo

cod       data_2            seq
1          17/10/1999      1 
1          10/01/2010      2
2          12/03/2009      1
3          13/05/2008      1

a TB_1 tem que ficar assim

Selecionar tudo

cod          data_1
1              17/10/1999
2              12/02/2009
3              13/05/2008

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

da uma olhada com carinho no teu codigo..

Selecionar tudo

UPDATE TB_1 SET data_1 = TB_2.data_2
FROM..
acho q isso de update from não funciona não..
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

Seu update não funcionaria pela forma que esta estruturado, tente algo próximo a isto:

Selecionar tudo

Update tb_1
   Set data_1 = (Select tb_2.data_2
                   From tb_2
                  Where tb_1.cod = tb_2.cod
                    And tb_2.data_2 < tb_1.data_1
                    And tb_2.seq = 1)
 Where tb_1.cod = '11111111' /
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Daria pra fazer com um subselect no update

algo tipo

Selecionar tudo

update tab1
set tab1.campo = (select tab2.campo from tab2 where tab2.codigo = tab1.codigo)
where tab1.codigo = &codigo
só tem de atentar para o subselect trazer apenas um resultado, do contrario vai dar pau.
gpngiovani
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 07 Ago 2014 5:51 pm

Vou aproveitar o mesmo tópico, sou iniciando em SQL e estou precisando de uma ajuda.
Tenho duas tabelas (SB2000 'saldo estoque' e SB9000 'saldo inicial') onde preciso atualizar o campo SB2000.B2_QINI com o conteúdo do campo da outra tabela SB9.B9_QFIM.
O detalhe é que ambas as tabelas tem vairas filiais, e o UPDATE será apenas em uma filial '09', quando a data da tabela SB9000.B9_DATA = '20131031'

tentei varias formas sem sucesso, segue um exemplo que deu errado.

Selecionar tudo

UPDATE SB2000  
      SET B2_QFIM  = (SELECT SB9.B9_QINI FROM SB9000 SB9 WHERE
                                           SB9.B9_LOCAL   = '01'           AND
                                           SB9.B9_FILIAL    = '09'           AND
                                           SB9.B9_DATA     = '20131031' AND
                                           SB9.d_E_L_E_T_ = ' ' )       
   WHERE 
           SB2000.B2_LOCAL      =   '01' AND
           SB2000.B2_FILIAL      =   '09' AND
           SB2000.B2_COD         =   SB9.B9_COD AND
           SB2000.d_E_L_E_T_   =  ' '
Esse é o erro:

Relatório de erros -
Erro de SQL: ORA-00904: "SB9"."B9_COD": identificador inválido
00904. 00000 - "%s: invalid identifier"

Abs!!
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá gpngiovani,

Bem vindo ao fórum GLUFKE !

Para uma melhor visibilidade, e para que mais pessoas possam responder mais rápido à você, sempre é bom criar um tópico novo.

No seu caso, "SB9" está dentro de uma subquerie do comando "SET=".
Da forma como construiu seu UPDATE, não há como mencionar colunas de SB9 fora do código situado em " SET = ( ......)". Ou seja, você não tem como mencionar ele no WHERE e nem em outra coluna a atualizar.

Abs,

Sergio
gpngiovani
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qui, 07 Ago 2014 5:51 pm

Opá!!

stcoutinho, você teria como me passar um exemplo de como seria a forma correta ? Já tentei de outras formas mas sem sucesso.

Valeu mesmo pelo retorno,

Forte abraço!!
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Hum ..

Não sei se a sua querie original estava completa .. mas tente isso:

Selecionar tudo

UPDATE SB2000  
  SET B2_QFIM  = (SELECT B9_QINI 
                     FROM SB9000
                    WHERE B9_LOCAL  = '01'           
                      AND B9_FILIAL = '09'         
                      AND B9_DATA     = '20131031' 
                      AND d_E_L_E_T_ = ' ' )       
WHERE B2_LOCAL   =   '01' 
  AND B2_FILIAL  =   '09' 
  AND d_E_L_E_T_ =  ' '
  AND B2_COD IN (SELECT B9_COD
                      FROM SB9000 
                     WHERE B9_LOCAL  = '01'           
                       AND B9_FILIAL = '09'         
                       AND B9_DATA     = '20131031' 
                       AND d_E_L_E_T_ = ' ' )       
Uma coisa: se a sua subquerie retornar mais de um B9_QINI para as condições de filtro em SB9000, seu comando de UPDATE vai gerar um erro, pois não é possivel atualizar uma coluna com uma lista de valores.

Abraços,

Sergio
Responder
  • Informação