- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 1 mês atrás por
rodrigobonela.
-
AutorPosts
-
24 de abril de 2009 às 5:59 pm #86403
rodrigobonela
ParticipanteFala 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.24 de abril de 2009 às 6:26 pm #86408Rodrigo Mesquita
ParticipanteVoce 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 10SQL> 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 10SQL> select dname from dept where deptno = 10;
DNAME
————–
abcAbraço
Rodrigo Mesquita
24 de abril de 2009 às 6:47 pm #86411Manoel872
ParticipanteBom dia!
Pessoal no oracle não existe a opção update cascade igual no MSSQL não?
Att,
Manoel jr.
24 de abril de 2009 às 7:56 pm #86416Regis Araujo
ParticipanteFala 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..!!
24 de abril de 2009 às 8:38 pm #86424Manoel872
ParticipanteThunder_Catz,
Isso funciona para oracle desde qual versão sabe me dizer?
Att,
Manoel jr
24 de abril de 2009 às 8:43 pm #86427Rodrigo Mesquita
ParticipanteBoa solução Thunder. Não lembrava disso.
24 de abril de 2009 às 8:59 pm #86429rodrigobonela
ParticipanteThunder_Catz,
Sabe se esse comando funciona para o banco 8i?
Ta dando erro aqui… Ora-00905 (Palavra-chave ausente)…
Abç.24 de abril de 2009 às 10:05 pm #86431Regis Araujo
ParticipanteFala 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..!!!
24 de abril de 2009 às 11:25 pm #86440rodrigobonela
ParticipantePessoal…
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. -
AutorPosts
- Você deve fazer login para responder a este tópico.