在oracle中怎样用一条sql语句更新两张有主外键关系的表的记录

 我来答
手机用户38705
2011-04-07
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
作者表 A (ID,NAME,AGE,SEX)其中ID为主键,文章表B(ID,AID,ARTICLE)其中ID为主键,AID为外键。如果你希望更新表A中某个作者的ID,并同时更新文章表B中对应的数据,那么写一个触发器:
create or replace trigger "A"
after update
of ID
on A_author
for each row

begin
if (:new.ID<>:old.ID ) then
update B_article set AID = :new.ID where AID = :old.ID;
end if;
end A;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lyx2000s
2011-03-28 · TA获得超过278个赞
知道答主
回答量:65
采纳率:100%
帮助的人:23.8万
展开全部
解决步聚。
1.先获取两张表的sequence
2.然后写两条语句吧...
:)不知道你是不因为主键id不好处理,sequence的一大好处就是这个,可以先获取然后在表中直接当作一个值插入即可.
追问
似乎不是哦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangzhiqing999
推荐于2021-01-24 · TA获得超过1.6万个赞
知道大有可为答主
回答量:7048
采纳率:100%
帮助的人:3293万
展开全部
你要更新什么字段?
主表的 主键?
还是 主表的数据与子表的 非主键/外键 数据,同时更新?
举个例子吧。
更多追问追答
追问
比如说一个表A(id--- 主键,name,card,other)B(id--- 主键,aid--- 外键,card)
把A表中的id为1的card改为222 ,同时将B表中的aid为1的card改为222
追答
好像只有使用触发器来干这个事情了:

SQL> CREATE TABLE A(
2 id INT PRIMARY KEY,
3 name VARCHAR(10),
4 card VARCHAR(10),
5 other VARCHAR(10)
6 );

表已创建。

SQL>
SQL>
SQL> CREATE TABLE B(
2 id INT PRIMARY KEY,
3 aid INT,
4 card VARCHAR(10)
5 );

表已创建。

SQL>
SQL> ALTER TABLE B
2 ADD CONSTRAINT A_id_cons
3 FOREIGN KEY (aid) REFERENCES A;

表已更改。

SQL> INSERT INTO A VALUES (1, 'A1', '111', '-');

已创建 1 行。

SQL> INSERT INTO B VALUES (1, 1, '111');

已创建 1 行。

SQL> CREATE OR REPLACE TRIGGER BeforeUpdateA
2 BEFORE UPDATE ON A
3 FOR EACH ROW
4 BEGIN
5 UPDATE B
6 SET
7 card = :new.Card
8 WHERE
9 aid = :new.id;
10 END;
11 /

触发器已创建

SQL> UPDATE A SET Card = '222' WHERE ID = 1;

已更新 1 行。

SQL> select * FROM A;

ID NAME CARD OTHER
---------- ---------- ---------- ----------
1 A1 222 -

SQL> SELECT * FROM B;

ID AID CARD
---------- ---------- ----------
1 1 222
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式