oracle课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XX大学
《数据库课程设计》设计报告
题目
学生姓名
学号
专业班级
指导老师
2012年1月
基础篇:
通过几个月的理论学习,我对oracle有了初步的了解,为了将理论知识运用到实际应用中,我参加了学校组织的课程设计,并选做了一些题目。
基础题
第十三题
scott.emp表使用用触发器实现业务规则:除销售员外,雇员工资只增不减
一、实验目的、内容
通过使用指针和when语句的判断,实现业务规则:除销售员外,雇员工资只增不减
二、实验程序设计及结构
1.应该建立触发器,使当员工工资改变时,除销售员外,雇员工资只增不减
2.使用when判断语句进行判断,当job= SALESMAN时,雇员工资只增不减,如果出现其他员工的工资减少,输出错误
三、设计过程
create or replace trigger check_sal_emp
before update of sal on emp
for each row
when (new.sal<=old.sal and old.job<>'SALESMAN')
begin
raise_application_error(-20010,'除销售员外,雇员工资只增不减');
end;
/
四.运行结果
update emp set sal=sal-100;
ORA-20010: 除销售员外,雇员工资只增不减
五.出现问题
1.when 语句后没有加括号,导致出现
when new.sal<=old.sal and job<>'SALESMAN'
*
ERROR at line 4:
ORA-00906: missing left parenthesis
2.没有给job定义
ERROR at line 4:
ORA-04076: invalid NEW or OLD specification
3.创建出触发器,但无法运行
SQL> create or replace trigger tr_emp_sal
2 before update of sal on emp
3 for each row
4 declare
5 maxsal number(6,2);
6 begin
7 select max(sal)into maxsal from emp;
8 if :new.sal 9 raise_application_error(-20010,'除销售员外,雇员工资只增不减'); 10 end if; 11 end; 12 / Trigger created. SQL> update emp set sal=sal-100; update emp set sal=sal-100 * ERROR at line 1: ORA-04091: table SCOTT.EMP is mutating, trigger/function may not see it ORA-06512: at "SCOTT.TR_EMP_SAL", line 4 ORA-04088: error during execution of trigger 'SCOTT.TR_EMP_SAL' 问题不明,经各种方式后仍无法解决。 六.设计的特点和结果 注意:当编写DML触发器时,触发器代码不能从触发器所对应的基表中读取数据。例如,如果要基于EMP表建立触发 器,那么该触发器的执行代码不能包含对EMP表的查询操作。尽管在建立触发器时不会出现任何错误,但在执行 相应触发操作时会显示错误信息。假定希望雇员工资不能超过当年的最高工资,使用该触发器实现该规则。 建立触发器时,不会显示错误,但因为触发器代码引用了emp表,所以在执行 ORA-06512: 在"SCOTT.TR_EMP_SAL", line 4 ORA-04088: 触发器'SCOTT.TR_EMP_SAL' 执行过程中出错 七.实践心得 通过实践,我了解了SQL语句,如INSERT UPDATE DELETE SELECT等的使用和学好如何连接数据库、创建语句、结果集、执行等基本操作。这些是数据库的基础操作,但也十分关键。而且在不断失败中获取经验,我最终完成了设 计,虽说完成的并不完美,但我还是从中得到了不少的收获,这将帮我在以后的计算机学习中少走弯路。不光如此,数据库的学习,更激起了我对编程的兴趣,使我最终下定决心,在寒假自学java和准备下学期的计算机二级考试。 八.参考文献 《Oracle10g快速入门》 九.操作系统和平台 Windows xp sp3 Oracle 10g 十.附录 1.create or replace trigger check_sal_emp before update of sal on emp for each row when (new.sal<=old.sal and old.job<>'SALESMAN') begin raise_application_error(-20010,'除销售员外,雇员工资只增不减'); end; / 2. SQL> create or replace trigger tr_emp_sal 2 before update of sal on emp 3 for each row 4 declare 5 maxsal number(6,2); 6 begin 7 select max(sal)into maxsal from emp; 8 if :new.sal 9 raise_application_error(-20010,'除销售员外,雇员工资只增不减'); 10 end if; 11 end; 12 /