oracle课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 /

相关文档
最新文档