华南农业大学大数据库系统概念实验报告材料七Word下载.docx

上传人:b****3 文档编号:17038355 上传时间:2022-11-28 格式:DOCX 页数:31 大小:692.89KB
下载 相关 举报
华南农业大学大数据库系统概念实验报告材料七Word下载.docx_第1页
第1页 / 共31页
华南农业大学大数据库系统概念实验报告材料七Word下载.docx_第2页
第2页 / 共31页
华南农业大学大数据库系统概念实验报告材料七Word下载.docx_第3页
第3页 / 共31页
华南农业大学大数据库系统概念实验报告材料七Word下载.docx_第4页
第4页 / 共31页
华南农业大学大数据库系统概念实验报告材料七Word下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

华南农业大学大数据库系统概念实验报告材料七Word下载.docx

《华南农业大学大数据库系统概念实验报告材料七Word下载.docx》由会员分享,可在线阅读,更多相关《华南农业大学大数据库系统概念实验报告材料七Word下载.docx(31页珍藏版)》请在冰豆网上搜索。

华南农业大学大数据库系统概念实验报告材料七Word下载.docx

1.完成实验指导书实验七所有实验内容

【训练1】

CREATETABLElogs(

LOG_IDNUMBER(10)PRIMARYKEY,

LOG_TABLEVARCHAR2(10)NOTNULL,

LOG_DMLVARCHAR2(10),

LOG_KEY_IDNUMBER(10),

LOG_DATEDATE,

LOG_USERVARCHAR2(15)

);

CREATESEQUENCElogs_id_squINCREMENTBY1

STARTWITH1MAXVALUE9999999NOCYCLENOCACHE;

CREATEORREPLACETRIGGERDML_LOG

BEFORE--触发时间为操作前

DELETEORINSERTORUPDATE--由三种事件触发

ONemp

FOREACHROW--行级触发器

BEGIN

IFINSERTINGTHEN

INSERTINTOlogsVALUES(logs_id_squ.NEXTVAL,'

EMP'

'

INSERT'

:

new.empno,SYSDATE,USER);

ELSIFDELETINGTHEN

INSERTINTOlogsVALUES(logs_id_squ.NEXTVAL,'

DELETE'

old.empno,SYSDATE,USER);

ELSE

UPDATE'

ENDIF;

END;

INSERTINTOemp(empno,ename,job,sal)VALUES(8001,'

MARY'

CLERK'

1000);

COMMIT;

SELECT*FROMLOGS;

【练习1】修改、删除刚刚插入的雇员记录,提交后检查LOGS表的结果。

updateemp

setsal=sal*5

whereename='

;

COMMIT;

DELETEFROMempWHEREempno=8001;

【练习2】为DEPT表创建同样的触发器,使用LOGS表进行记录,并检验结果。

CREATEORREPLACETRIGGERDEPT_LOG

ONdept

DEPT'

new.deptno,SYSDATE,USER);

old.deptno,SYSDATE,USER);

INSERTINTOdept(deptno,dname,loc)VALUES(50,'

JIAN'

GUANGZHOU'

);

【训练2】

CREATETABLElogerr(

NUMNUMBER(10)NOTNULL,

MESSAGEVARCHAR2(50)NOTNULL

CREATEORREPLACETRIGGERlog_sal

BEFORE

UPDATEOFsal

FOREACHROW

WHEN(new.job='

AND(ABS(new.sal-old.sal)>

200))

DECLARE

v_noNUMBER;

SELECTCOUNT(*)INTOv_noFROMlogerr;

INSERTINTOlogerrVALUES(v_no+1,'

雇员'

||:

new.ename||'

的原工资:

'

old.sal||'

新工资:

new.sal);

UPDATEempSETsal=sal+550WHEREempno=7788;

UPDATEempSETsal=sal+500WHEREempno=7369;

UPDATEempSETsal=sal+50WHEREempno=7876;

SELECT*FROMlogerr;

【训练3】

CREATEORREPLACETRIGGERCHECK_SAL

UPDATE

IF:

new.job='

AND(:

new.sal<

500OR:

new.sal>

2000)THEN

RAISE_APPLICATION_ERROR(-20001,'

工资修改超出范围,操作取消!

UPDATEempSETsal=800WHEREempno=7876;

UPDATEempSETsal=450WHEREempno=7876;

SELECTempno,ename,job,salFROMempWHEREempno=7876;

【练习3】限定对emp表的修改,只能修改部门10的雇员工资。

CREATEORREPLACETRIGGERCHECK_NO

new.DEPTNO<

>

10THEN

修改的部门不符,操作取消!

UPDATEempSETsal=8000WHEREdeptno=20;

UPDATEempSETsal=6789WHEREdeptno=30;

UPDATEempSETsal=888WHEREdeptno=10;

select*fromemp;

【训练4】

CREATETRIGGERCASCADE_UPDATE

AFTER

UPDATEOFdeptno

ONDEPT

FOREACHROW

BEGIN

UPDATEEMPSETEMP.DEPTNO=:

NEW.DEPTNO

WHEREEMP.DEPTNO=:

OLD.DEPTNO;

UPDATEdeptSETdeptno=11WHEREdeptno=10;

SELECTempno,ename,deptnoFROMemp;

【练习4】建立级联删除触发器CASCADE_DELETE,当删除部门时,级联删除EMP表的雇员记录。

CREATETRIGGERCASCADE_DELETE

DELETE

ONDEPT

DELETEFROMEMPWHEREEMP.DEPTNO=:

DELETEFROMDEPTWHEREDEPTNO=11;

SELECT*FROMEMP;

SELECT*FROMDEPT;

【训练5】

CREATEORREPLACETRIGGERINITCAP

BEFOREINSERT

ONEMP

:

new.ename:

=INITCAP(:

new.ename);

END;

INSERTINTOemp(empno,ename,job,sal)VALUES(1000,'

BILL'

1500);

SELECTename,job,salFROMempWHEREempno=1000;

【练习5】限定一次对雇员的工资修改不超过原工资的10%。

CREATEORREPLACETRIGGERCHECK_SALARY

BEFORE

UPDATEOFSAL

IF:

new.SAL>

=:

old.SAL*1.1THEN

new.SAL:

old.SAL;

ELSIF:

new.SAL<

old.SAL*0.9THEN

SELECT*FROMEMPWHEREEMPNO=7876;

UPDATEEMPSETSAL=SAL*1.08WHEREEMPNO=7876;

7.2.4【训练1】

CREATEORREPLACETRIGGERCHECK_TIME

UPDATEORINSERTORDELETE

IF(TO_CHAR(SYSDATE,'

DY'

)IN('

SAT'

SUN'

))

ORTO_CHAR(SYSDATE,'

HH24'

)<

'

08'

)>

='

17'

THEN

RAISE_APPLICATION_ERROR(-20500,'

非法时间修改表错误!

ENDIF;

UPDATEEMPSETSAL=3000WHEREEMPNO=7369;

【练习1】设计一个语句级触发器,限定只能对数据库进行修改操作,不能对数据库进行插入和删除操作。

在需要进行插入和删除时,将触发器设置为无效状态,完成后重新设置为生效状态。

CREATEORREPLACETRIGGERonlyupdate

IFdeletingorinsertingthen

非法操作!

 

7.3

CREATEORREPLACETRIGGERNODROP_EMP

DROPONSCHEMA

IFSys.Dictionary_obj_name='

RAISE_APPLICATION_ERROR(-20005,'

错误信息:

不能删除emp表!

DROPTABLEemp;

7.4

CREATEVIEWemp_nameASSELECTenameFROMemp;

CREATEORREPLACETRIGGERchange_name

INSTEADOFINSERTONemp_name

DECLARE

V_EMPNONUMBER(4);

SELECTMAX(EMPNO)+1INTOV_EMPNOFROMEMP;

INSERTINTOemp(empno,ename)

VALUES(V_EMPNO,:

INSERTINTOemp_nameVALUES('

BROWN'

CREATEORREPLACETRIGGERdelete_from_ename

INSTEADOFDELETEONemp_name

RAISE_APPLICATION_ERROR(-20006,'

不能在视图中删除emp表的雇员!

实验七 创建触发器,进行表的同步复制

CREATEORREPLACETRIGGERcopytime

beforeINSertOFDELETEorUPDATEONcc;

ifinsertingthen

insertintocopynewvalues(:

newid);

elsifdeleting

thendeletecopynewwhereid=:

old.id;

elseupdatecopynewsetid:

=:

newidwhereid=:

oldid;

endif;

出现问题

解决方案

(列出遇到的问题及其解决方法)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1