下载此文档

小议Oracle外键约束修改行为(五).docx


文档分类:论文 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
该【小议Oracle外键约束修改行为(五) 】是由【xx】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【小议Oracle外键约束修改行为(五) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。
小议Oracle外键约束修改行为(五)
Oracle的外键用来限制子表中参考的字段的值,必须在主表中存在。而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时,定义了一系列的动作。
前面几篇文章介绍了Oracle所支持的3种约束行为NOACTION、,Oracle只能通过触发器来实现,这里给出一个简单的UPDATESETNULL操作的例子。
SQL>DROPTABLET_C;
表已删除。
SQL>DROPTABLET_P;
表已删除。
SQL>CREATETABLET_P(IDNUMBER,NAMEVARCHAR2(30));
表已创建。
SQL>ALTERTABLET_PADDPRIMARYKEY(ID);
表已更改。
SQL>CREATETABLET_C(IDNUMBER,FIDNUMBER,NAMEVARCHAR2(30));
表已创建。
SQL>ALTERTABLET_CADDCONSTRAINTFK_T_C
2FOREIGNKEY(FID)
3REFERENCEST_P(ID);
表已更改。
SQL>INSERTINTOT_PVALUES(1,’A’);
已创建1行。
SQL>INSERTINTOT_PVALUES(2,’B’);
已创建1行。
SQL>INSERTINTOT_CVALUES(1,1,’A’);
已创建1行。
SQL>COMMIT;
提交完成。
检查一下直接更新操作:
SQL>SELECT*FROMT_P;
IDNAME
----------------------------------------
1A
2B
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
11A
SQL>UPDATET_PSETID=3WHEREID=1;
UPDATET_PSETID=3WHEREID=1
*第1行出现错误:
ORA-02292:违反完整约束条件()-已找到子记录日志
下面构造一个触发器:
SQL>CREATEORREPLACETRIGGERT_P_UPDATE_SET_NULL
2BEFOREUPDATEONT_P
3FOREACHROW
4DECLARE
5V_STRVARCHAR2(32767);
6BEGIN
7IFNVL(:,-1)!=NVL(:,-1)THEN
8FORIIN(SELECTOWNER,TABLE_NAME,CONSTRAINT_NAME
9FROMALL_CONSTRAINTS
10WHERECONSTRAINT_TYPE=’R’
11ANDR_OWNER=’YANGTK’
12ANDR_CONSTRAINT_NAMEIN
13(SELECTCONSTRAINT_NAMEFROMUSER_CONSTRAINTSWHERETABLE_NAME=’T_P’))
14LOOP
15V_STR:=’UPDATE’||||’SET’;
16FORJIN(SELECTCOLUMN_NAMEFROMALL_CONS_COLUMNS
17WHEREOWNER=
18ANDTABLE_NAME=
19ANDCONSTRAINT_NAME=)
20LOOP
21V_STR:=V_STR||||’=NULL’
22||’WHERE’||||’=’||:;
23ENDLOOP;
24EXECUTEIMMEDIATEV_STR;
25ENDLOOP;
26ENDIF;
27END;
28/
触发器已创建
SQL>SELECT*FROMT_P;
IDNAME
----------------------------------------
1A
2B
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
11A
SQL>UPDATET_PSETID=3WHEREID=1;
已更新1行。
SQL>SELECT*FROMT_P;
IDNAME
----------------------------------------
3A
2B
SQL>SELECT*FROMT_C;
IDFIDNAME
--------------------------------------------------
1A
UPDATESETNULL操作其实和UPDATECASCADE很相似,不同之处无非是一个置为NULL,另一个置为主键的新值。
本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!

小议Oracle外键约束修改行为(五) 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xx
  • 文件大小31 KB
  • 时间2023-02-10