Oracle实验报告之触发器

时间:2024.4.21

实验名称:使用游标、存储过程和触发器

实验课时:2课时

实验地点:E305

实验时间:20##年5月 21日    星期 三    第14 周

实验目的及要求:

(1)    了解游标的概念和工作原理。

(2)    了解存储过程的分类和使用方法。

(3)    了解触发器的概念。

(4)    学习编写和执行自定义过程。

(5)    学习创建和使用触发器。

实验环境:

(1)    硬件设备:PC机一台

(2)    操作系统:Windows XP

(3)    应用工具:Oracle 11g

实验内容:(算法、程序、步骤和方法)

(1)    创建游标mycur,从表employees中读取1号部门的员工姓名,职务。并输出“员工姓名:XXX,职务:XXX。”

程序代码如下:

set serveroutput on;

DECLARE 

CURSOR mycur IS

SELECT  emp_name, title

FROM  employees

where dep_id=1;

BEGIN

FOR  yw  IN  mycur  LOOP 

dbms_output.put_line('员工姓名:'||yw.emp_Name||'职务:'||yw.title);

END LOOP;

END;

执行结果如下:

 

(2)    创建存储过程GetGrade,查询指定员工的工资,使用CASE语句输出其工资等级。工资小于等于3000,等级为“低”;工资大于3000,小于5000,等级为”中”;工资大于等于5000,等级为高。并执行该存储过程。

创建存储过程代码如下:

create or replace procedure getgrade

(yw_depid number)

as 

yw_wage employees.wage%type;

yw_grade varchar2(5);

begin 

select wage into yw_wage

from employees

where emp_id=yw_depid;

yw_grade:=case 

when yw_wage<=3000 then '

when yw_wage>=3000 and yw_wage<5000 then ''

when yw_wage>=5000 then ''

end; 

dbms_output.put_line('该员工工资等级为'||yw_grade);

end;

执行存储过程代码如下:

execute getgrade(3);

call getgrade(3);

执行结果如下:

(3)    创建存储过程UpdateWage,查询指定员工的工资,如果工资小于3000,则加200工资,并提示信息“XX号员工工资已更新。”,如果工资大于3000,则提示信息“XX号员工工资为XXX,已达到规定标准。”

创建存储过程代码如下:

create or replace procedure updatewage

(yw_depid number)

as 

yw_wage employees.wage%ywpe;

BEGIN

  Select wage into yw_wage

  From employees

  Where employees.emp_id =yw_depid;

If  yw_wage <3000 then

Update employees

Set employees.wage= employees.wage+200

Where employees.emp_id= yw_depid;

Commit;

DBMS_OUTPUT.PUT_LINE('5号工资已更新');

Else

DBMS_OUTPUT.PUT_LINE('5号工资为'|| yw_wage ||'已达到规定标准');

END if;

Exception

When no_data_found then

DBMS_OUTPUT.PUT_LINE('不存在该员工');

When others then

DBMS_OUTPUT.PUT_LINE('其他异常');

End;

/执行存储过程代码如下:

Call updatewage(3);

执行结果如下:

(4)    创建触发器MyTrigger,它的作用是当表departments中的记录被删除后,自动删除表employees中的对应的员工记录,从而保证数据的完整性。

程序代码如下:

create or replace trigger mytrigger

after update on departments 

for each row

begin 

update employees set dep_id = :new.dep_id

where dep_id = :old.dep_id;

end; 

执行结果如下:

小结:

通过这次上机实验,我有以下收获:

了解了如何使用游标,触发器和存储过程,知道他们的作用及原理.

但是还上机操作过程中还存在以下几个方面的不足:

无法熟练的使用游标和存储过程的创建,对代码无法正确敲出来.

指导老师评议:

成绩:     指导老师签名:

年 月 日


第二篇:oracle触发器创建格式


数据库定义语言触发器create [or replace] trigger trigger_name{before |after| instead of}ddl_event on {database|schema}[when (logical_expression)][declare]declaration_statements;beginexecution_statements;end [trigger_name];/create sequence audit_seq increment by 1 start with 10000create table audit_creation(audit_creation_id number primary key,audit_owner_name varchar2(30) not null,audit_obj_name varchar2(30) not null,audit_date date not null)create or replace trigger audit_creationbefore create on schemabegininsert into audit_creation values(audit_seq.nextval,ora_dict_obj_owner,ora_dict_obj_name,sysdate);end audit_creation;/数据操作语言触发器create [or replace] trigger trigger_name{before |after}{insert |update|update of column1[,column2[,column(n+1)]] |delete}on table_name[for each row][when (logical_expression)][declare][pragma autonomous_transaction;]declaration_statements;beginexecution_statements;end [trigger_name];/自治事务的理解:pragma autonomous_transaction;自治域加在declare块中,有了这样的预处理,就会使定义的对象为一个单独的事务域,与其他事务无关。复合触发器不支持when子句和pragmacreate [or replace] trigger trigger_namefor {insert |update|update of column1[,column2[,column(n+1)]] |delete}on table_namecompound trigger[before statement is[declaration_statement;]beginexecution_statements;end before statement;][before each row is[declaration_statement;]beginexecution_statements;end before each row;][after each row is[declaration_statement;]beginexecution_statements;end after each row;][after statement is[declaration_statement;]beginexecution_statements;end after statement;]end [trigger_name];/instead-of 触发器create [or replace] trigger trigger_nameinstead of {dml_statement}on {object_name|database|schema}for each row[when (logical_expression)][declare]declaration_statements;beginexecution_statements;end [trigger_name];/判断条件 inserting、updating、deleting在触发器中编写不可更新视图的结构:1.集合运算符2.聚集函数3.case或者decode语句4.connect by、group by、having或者start with子句5.distinct运算符6.连接系统或者数据库事件触发器create [or replace] trigger trigger_name{before |after} database_event on {database|schema}[declare]declaration_statements;beginexecution_statements;end [trigger_name];/例子:create or replace trigger connection_triggerafter logon on databasebegin user_connection.connecting(sys.login_user);end;触发器的限制最大触发器的尺寸 32760 byte非系统触发器主体不能包含ddl语句、dcl、transaction control language

更多相关推荐:
触发器实验报告

深圳大学实验报告课程名称学院计算机与软件学院实验时间实验报告提交时间教务部制注1报告内的项目或内容设置可根据实际情况加以调整和补充2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

触发器及其应用实验报告

学生实验报告

电子技术实验报告5-触发器及其应用

学生实验报告

数字逻辑实验-触发器实验报告

本科学生综合性实验报告实验课程名称数字逻辑与数字系统

触发器 R-S、D 、J-K 实验报告(有数据)

实验五触发器RSDJK一实验目的1熟悉并掌握RSDJK触发器的构成工作原理和功能测试方法2学会正确使用触发器集成芯片3了解不同逻辑功能触发器相互转换的方法二实验仪器及器件1双踪示波器2实验用元器件74LS001...

D触发器及其应用实验报告

实验五D触发器及其应用实验人员班号学号一实验目的1熟悉D触发器的逻辑功能2掌握用D触发器构成分频器的方法3掌握简单时序逻辑电路的设计二实验设备74LS0074LS74数字电路实验箱数字双踪示波器函数信号发生器三...

数据库实验3 触发器报告

数据库专题训练触发器实验报告系别计算机科学与技术班级计113班姓名黄娟娟学号11101020xx4成绩评语指导教师签字日期实验二触发器一实验环境及要求触发器是一种特殊的存储过程不能被用户直接调用可以包含复杂的S...

EDA触发器实验报告

深圳大学实验报告课程名称学院信息工程实验时间实验报告提交时间教务处制深圳大学学生实验报告用纸注1报告内的项目或内容设置可根据实际情况加以调整和补充2教师批改学生实验报告时间应在学生提交实验报告时间后10日内

数据库实验报告 存储过程和触发器

西北师范大学计算机科学与工程学院学生实验报告1234567

D触发器设计实验报告

CS1110梅超U20xx14468第1页共1页D触发器设计实验报告一实验目的1用ISE142的软件开启一个Spartan3E的项目2撰写一个简单的Schematic原理图用语法检查器SyntaxCheck来修...

触发器工作原理与功能测试 实验报告

中山大学南方学院电子通信与软件工程系学期数字电路与逻辑设计实验实验报告班级姓名学号成绩同组成员姓名学号一实验名称触发器工作原理与功能测试二实验目的1熟悉并掌握RSDJK触发器的构成工作原理和功能测试方法2学会正...

半加器和D触发器实验报告

VHDL硬件描述语言实验实验内容报告1半加器2D触发器半加器实验原理quot和quot与quot进位quot根据半加器的逻辑表达式可知半加器的和so是abco是ab相与所以半加器可以用两个与非门和一个异或门组成...

触发器实验报告(40篇)