Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por rodrigobonela.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #86403
    rodrigobonela
    Participante

      Fala galera… Tudo blz?
      Pow, seguinte…
      To precisando fazer um UPDATE em duas tabelas simultaneamente…
      Tenho uma tabela mãe que tem uma PK e uma tabela filha que tem uma FK que é a mesma PK desta tabela mãe…
      Qdo faço o update na PK da tabela mae da um erro, pois a FK da filha fica inisistente na tabela mãe.
      Alguém tem uma idéia ai do que posso fazer?!?!?!
      Grande abraço.

      #86408
      Rodrigo Mesquita
      Participante

        Voce pode fazer como esse exemplo

        — cria uma view
        SQL> create or replace view v_for_update
        2 as
        3 select e.ename,d.dname,e.empno,d.deptno
        4 from emp e, dept d
        5 where e.deptno=d.deptno
        6 /

        View created.

        –cria um trigger instead of update

        SQL> create or replace trigger tr_on_v_for_update
        2 instead of update on v_for_update
        3 begin
        4
        5 update emp set ename = :new.ename
        6 where empno = 😮 ld.empno and deptno = 😮 ld.deptno;
        7
        8 update dept set dname = :new.dname
        9 where deptno = 😮 ld.deptno
        10 and exists (select 1 from emp where empno = 😮 ld.empno
        11 and deptno = 😮 ld.deptno);
        12
        13 end;
        14 /

        Trigger created.

        — Para testar veja como estão dos dados

        SQL> select ename, deptno from emp where empno = 7934
        2 /

        ENAME DEPTNO
        ———- ———-
        MILLER 10

        SQL> select dname from dept where deptno = 10;

        DNAME
        ————–
        ACCOUNTING

        –faça um update na view

        SQL> update v_for_update set ename = ‘xyz’, dname=’abc’ where empno = 7934 and deptno = 10
        2 /

        1 row updated.

        — Ele fará um update nas tabelas necessárias

        SQL> select ename, deptno from emp where empno = 7934
        2 /

        ENAME DEPTNO
        ———- ———-
        xyz 10

        SQL> select dname from dept where deptno = 10;

        DNAME
        ————–
        abc

        Abraço

        Rodrigo Mesquita

        #86411
        Manoel872
        Participante

          Bom dia!

          Pessoal no oracle não existe a opção update cascade igual no MSSQL não?

          Att,

          Manoel jr.

          #86416
          Avatar photoRegis Araujo
          Participante

            Fala Rodrigo, ble!

            Então, é como o Manoel falou, cria sua FK com a opção ON UPDATE CASCADE, pois sempre que vc trocar algum valor no ID da tabela MÃE, automaticamente os valores são alterados em todas as tabelas FILHA…

            SQL> alter table NOME_TABELA add constraint FK_NOME
            foreign key (NOME_CAMPO) references tabela_mae(id_tabelamae)
            on update cascade on delete restrict;

            O On Delete Restrict só vai garantir que vc não delete algum valor da tabela MAE quando existir alguma tabela filha com este valor…
            Caso você queira deletar da mãe e também deletar das filhas.. coloca o ON DELETE CASCADE…

            Abraços..!!

            #86424
            Manoel872
            Participante

              Thunder_Catz,

              Isso funciona para oracle desde qual versão sabe me dizer?

              Att,

              Manoel jr

              #86427
              Rodrigo Mesquita
              Participante

                Boa solução Thunder. Não lembrava disso.

                #86429
                rodrigobonela
                Participante

                  Thunder_Catz,
                  Sabe se esse comando funciona para o banco 8i?
                  Ta dando erro aqui… Ora-00905 (Palavra-chave ausente)…
                  Abç.

                  #86431
                  Avatar photoRegis Araujo
                  Participante

                    Fala Rodrigo.. Ble..

                    Bom, andei pesquisando e parece que o on update cascade não funciona no oracle..
                    Estranho.. mas também achei um artigo que creio que irá te ajudar…

                    http://glufke.net/oracle/viewtopic.php?t=429

                    Abraços..!!!

                    #86440
                    rodrigobonela
                    Participante

                      Pessoal…
                      Vlw pelas dicas…
                      Mas resolvi o problema de outra forma…
                      Como o update era feito pela chamada do Java, criei uma procedure que fazia o processo todo…
                      Muito obrigado pelas dicas de todos…
                      Grande Abraço.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.
                    plugins premium WordPress