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

来源:百度  [  文档由 cnhk3557 贡献   ]  责编:吕秀玲  |  侵权/违法举报

参考 http://tieba.baidu.com/f?kz=121374676(9)下列叙述中正确的是_。(C)A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统 C.数据库技术的根本目标是要解决数据共享的问题 D.数据库系统中,数据的物理结构必须与逻辑结构一致 由题目和答案可以知道,“数据库是一个独立的系统,不需要操作系统的支持”这个叙述是不正确的www.egvchb.cn防采集请勿采集本网。

《数据库系统》实验报告七学号姓名实验时间2014-12-31实验名称触发器实验学时2准备材料

1. SQL Plus命令手册2. PL/SQL用户手册

数据库系统设计员可在视图层、逻辑层和物理层对数据抽象,通过外模式、概念模式和内模式来描述不同层次上的数据特性。总之,数据按外模式的描述提供给用户;按内模式的描述存储在磁盘上;而概念模式提供了

3. 实验教材中实验七扩展实验

数据库系统能尽快恢复数据库系统运行时出现的故障,可能是物理上或是逻辑上的错误。比如对系统的误操作造成的数据错误等。扩展资料 数据库技术的应用及特点 数据库最初是在大公司或大机构中用作大规模事务

1.完成触发器的定义、执行与管理操作

数据库:长期存储在计算机内,有组织可共享的数据集合 数据库管理系统(DBMS):提供数据的定义,操作,描述的语言,还有数据库的运行管理,建立以及维护,一般指数据库管理软件 如 SqlServer、

(此部分内容不要求在实验室完成,不用写入实验报告。)实验环境

授权

Oracle 9i(及以上版本)服务器

并发(concurrent)和并行(parallel)这两个概念,在数据库系统的资料中经常出现,然而有关它们的定义和区别却没有明确的说法。这里,我们根据这两个概念在资料中的使用,对它们的不同做一个

SQL Plus/ SQL Plus work sheet客户端实验目的

1 熟悉PL/SQL语法2. 利用PL/SQL编程访问数据库

实验内容及步骤

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

【训练1】

CREATE TABLE logs(

LOG_ID NUMBER(10) PRIMARY KEY,

LOG_TABLE VARCHAR2(10) NOT NULL,

LOG_DML VARCHAR2(10),

LOG_KEY_ID NUMBER(10),

LOG_DATE DATE,

LOG_USER VARCHAR2(15) );

点击图片看大图

CREATE SEQUENCE logs_id_squ INCREMENT BY 1

START WITH 1 MAXVALUE 9999999 NOCYCLE NOCACHE;

点击图片看大图

CREATE OR REPLACE TRIGGER DML_LOG

BEFORE --触发时间为操作前

DELETE OR INSERT OR UPDATE -- 由三种事件触发

ON emp

FOR EACH ROW -- 行级触发器

BEGIN

IF INSERTING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','INSERT',:new.empno,SYSDATE,USER);

ELSIF DELETING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','DELETE',:old.empno,SYSDATE,USER); ELSE

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'EMP','UPDATE',:new.empno,SYSDATE,USER);

END IF; END;

点击图片看大图

INSERT INTO emp(empno,ename,job,sal) VALUES(8001,'MARY','CLERK',1000);

COMMIT;

点击图片看大图

SELECT * FROM LOGS;

点击图片看大图

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

update emp

set sal = sal*5

where ename = 'MARY';

COMMIT;

点击图片看大图

DELETE FROM emp WHERE empno = 8001;

COMMIT;

点击图片看大图

SELECT * FROM LOGS;

点击图片看大图

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

CREATE OR REPLACE TRIGGER DEPT_LOG

BEFORE --触发时间为操作前

DELETE OR INSERT OR UPDATE -- 由三种事件触发

ON dept

FOR EACH ROW -- 行级触发器

BEGIN

IF INSERTING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'DEPT','INSERT',:new.deptno,SYSDATE,USER);

ELSIF DELETING THEN

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'DEPT','DELETE',:old.deptno,SYSDATE,USER); ELSE

INSERT INTO logs VALUES(logs_id_squ.NEXTVAL,'DEPT','UPDATE',:new.deptno,SYSDATE,USER);

END IF; END;

点击图片看大图

INSERT INTO dept(deptno,dname,loc) VALUES(50,'JIAN','GUANGZHOU');

COMMIT;

点击图片看大图

SELECT * FROM LOGS;

点击图片看大图

【训练2】

CREATE TABLE logerr(

NUM NUMBER(10) NOT NULL,

MESSAGE VARCHAR2(50) NOT NULL );

点击图片看大图

CREATE OR REPLACE TRIGGER log_sal

BEFORE

UPDATE OF sal

ON emp

FOR EACH ROW

WHEN (new.job='CLERK' AND (ABS(new.sal-old.sal)>200))

DECLARE

v_no NUMBER;

BEGIN

SELECT COUNT(*) INTO v_no FROM logerr;

INSERT INTO logerr VALUES(v_no+1,'雇员'||:new.ename||'的原工资:'||:old.sal||'新工资:'||:new.sal); END;

点击图片看大图

UPDATE emp SET sal=sal+550 WHERE empno=7788;

UPDATE emp SET sal=sal+500 WHERE empno=7369;

UPDATE emp SET sal=sal+50 WHERE empno=7876;

COMMIT;

点击图片看大图

SELECT * FROM logerr;

点击图片看大图

【训练3】

CREATE OR REPLACE TRIGGER CHECK_SAL

BEFORE

UPDATE

ON emp

FOR EACH ROW

BEGIN

IF :new.job='CLERK' AND (:new.sal<500 OR :new.sal>2000) THEN

RAISE_APPLICATION_ERROR(-20001, '工资修改超出范围,操作取消!');

END IF; END;

点击图片看大图

UPDATE emp SET sal=800 WHERE empno=7876;

UPDATE emp SET sal=450 WHERE empno=7876;

COMMIT;

点击图片看大图

SELECT empno,ename,job,sal FROM emp WHERE empno=7876;

点击图片看大图

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

CREATE OR REPLACE TRIGGER CHECK_NO

BEFORE

UPDATE

ON emp

FOR EACH ROW

BEGIN

IF :new.DEPTNO<>10 THEN

RAISE_APPLICATION_ERROR(-20001, '修改的部门不符,操作取消!');

END IF; END;

点击图片看大图

UPDATE emp SET sal=8000 WHERE deptno=20;

UPDATE emp SET sal=6789 WHERE deptno=30;

UPDATE emp SET sal=888 WHERE deptno=10;

点击图片看大图

select * from emp;

点击图片看大图

【训练4】

CREATE TRIGGER CASCADE_UPDATE

AFTER

UPDATE OF deptno

ON DEPT

FOR EACH ROW

BEGIN

UPDATE EMP SET EMP.DEPTNO=:NEW.DEPTNO

WHERE EMP.DEPTNO=:OLD.DEPTNO; END;

点击图片看大图

UPDATE dept SET deptno=11 WHERE deptno=10;

COMMIT;

点击图片看大图

SELECT empno,ename,deptno FROM emp;

点击图片看大图

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

CREATE TRIGGER CASCADE_DELETE

AFTER

DELETE

ON DEPT

FOR EACH ROW

BEGIN

DELETE FROM EMP WHERE EMP.DEPTNO=:OLD.DEPTNO; END;

点击图片看大图

DELETE FROM DEPT WHERE DEPTNO = 11;

COMMIT;

点击图片看大图

SELECT * FROM EMP;

点击图片看大图

SELECT * FROM DEPT;

点击图片看大图

【训练5】

CREATE OR REPLACE TRIGGER INITCAP

BEFORE INSERT

ON EMP

FOR EACH ROW

BEGIN

:new.ename:=INITCAP(:new.ename);END;

点击图片看大图

INSERT INTO emp(empno,ename,job,sal) VALUES(1000,'BILL','CLERK',1500);

点击图片看大图

SELECT ename,job,sal FROM emp WHERE empno=1000;

点击图片看大图

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

CREATE OR REPLACE TRIGGER CHECK_SALARY

BEFORE

UPDATE OF SAL

ON EMP

FOR EACH ROW

BEGIN

IF :new.SAL >= :old.SAL*1.1 THEN

:new.SAL:= :old.SAL;

ELSIF :new.SAL <= :old.SAL*0.9 THEN

:new.SAL:= :old.SAL;

END IF;END;

点击图片看大图

SELECT * FROM EMP WHERE EMPNO = 7876;

UPDATE EMP SET SAL = SAL*1.08 WHERE EMPNO = 7876;

COMMIT;

SELECT * FROM EMP WHERE EMPNO = 7876;

点击图片看大图

7.2.4【训练1】

CREATE OR REPLACE TRIGGER CHECK_TIME

BEFORE

UPDATE OR INSERT OR DELETE

ON EMP

BEGIN

IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN'))

OR TO_CHAR(SYSDATE,'HH24')< '08'

OR TO_CHAR(SYSDATE,'HH24')>='17' THEN

RAISE_APPLICATION_ERROR(-20500,'非法时间修改表错误!');

END IF; END;

点击图片看大图

UPDATE EMP SET SAL=3000 WHERE EMPNO=7369;

点击图片看大图

【练习1】设计一个语句级触发器,限定只能对数据库进行修改操作,不能对数据库进行插入和删除操作。在需要进行插入和删除时,将触发器设置为无效状态,完成后重新设置为生效状态。

CREATE OR REPLACE TRIGGER onlyupdate

BEFORE

UPDATE OR INSERT OR DELETE

ON EMP

BEGIN

IF deleting or inserting then

RAISE_APPLICATION_ERROR(-20500,'非法操作!');

END IF; END;

点击图片看大图7.3

【训练1】

CREATE OR REPLACE TRIGGER NODROP_EMP

BEFORE

DROP ON SCHEMA

BEGIN

IF Sys.Dictionary_obj_name='EMP' THEN

RAISE_APPLICATION_ERROR(-20005,'错误信息:不能删除emp表!');

END IF; END;

点击图片看大图

DROP TABLE emp;

点击图片看大图7.4

【训练1】

CREATE VIEW emp_name AS SELECT ename FROM emp;

点击图片看大图

CREATE OR REPLACE TRIGGER change_name

INSTEAD OF INSERT ON emp_name

DECLARE

V_EMPNO NUMBER(4);

BEGIN

SELECT MAX(EMPNO)+1 INTO V_EMPNO FROM EMP;

INSERT INTO emp(empno,ename)

VALUES(V_EMPNO,:new.ename); END;

点击图片看大图

INSERT INTO emp_name VALUES('BROWN');

COMMIT;

点击图片看大图

【训练2】

CREATE OR REPLACE TRIGGER delete_from_ename

INSTEAD OF DELETE ON emp_name

BEGIN

RAISE_APPLICATION_ERROR(-20006,'错误信息:不能在视图中删除emp表的雇员!'); END;

点击图片看大图

点击图片看大图

点击图片看大图

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

CREATE OR REPLACE TRIGGER copytime

before INSert OF DELETE or UPDATE ON cc;

BEGIN

if inserting then

insert into copynew values(:new id);

elsif deleting

then delete copynew where id=:old.id;

else update copynew set id:=:new id where id=:old id;

end if; END;出现问题解决方案

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

1、数据(data)是载荷或记录信息的按一定规则排列组合的物理符号。可以是数字、文字、图像,也可以是计算机代码。2、数据库(Database)是按照 数据结构来组织、存储和管理数据的仓库。3、数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。4、数据库系统是数据库的使用既可以在程序中实现,也可以在独立的数据操作界面中实现,比如在SQL Server数据库系统中,我们既可以使用T-SQL语言操作数据库,也可以使用SQL Server企业管理器实现对数据库的操作和管理内容来自www.egvchb.cn请勿采集。

www.egvchb.cn true http://www.egvchb.cn/wendangku/zds/fdfg/jcb9deea22dv/k7375a417866fb84ae45c3a35c293l.html report 34965 《数据库系统》实验报告七学号姓名实验时间2014-12-31实验名称触发器实验学时2准备材料1. SQL Plus命令手册2. PL/SQL用户手册3. 实验教材中实验七扩展实验1.完成触发器的定义、执行与管理操作 (此部分内容不要求在实验室完成,不用写入实验报告。)实验环境Oracle 9i(及以上版本)服务器SQL Plus/ SQL Plus work sheet客户端实验目的1 熟悉PL/SQL语法2. 利用PL/SQL编程访问数据库实验
  • 猜你喜欢
马洪刚决战澳门 股票怎么玩不懂股票 河南11选5开奖直播 手机照片恢复软件免费版哪个好用 山西快乐10分一点技巧没有吗 股票最近大盘 甘肃十一选五开奖走势图 体彩排列五开机号试机号多少 贵州茅台股票分析报告 江苏快3开奖结果走势图 陕西十一选五分析软件 宁夏11选5任选五遗漏 山东群英会任选单式开奖 北京pk10视频 36选7好彩1技巧 辽宁35选7走势图 幸运之门 股票买卖挂单成交规则