广州大学学生实验报告
开课学院及实验室:计算机科学与工程实验室418B室 2018年05月 31 日
学院 |
计算机科学与教育软件 |
年级、专业、班 |
网络*** |
姓名 |
卟咚君 |
学号 |
1606100*** |
|
实验课程名称 |
数据库原理实验 |
成绩 |
|
|||||
实验项目名称 |
Oracle数据库对象 |
指导老师 |
*** |
|||||
实验目的
掌握数据库对象如触发器、存储过程和函数的定义和使用。
实验要求
熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。
实验环境
Oracle 10g,windows 2003;
实验内容和步骤
1.编写带有一个输入参数和一个输出参数的存储过程,输入参数为教师的编号类型,输出参数与tm表的workdays类型一致,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;
create or replace procedure findsumworkdays(v_tno varchar2)
as
v_workdays int;
begin
select a1.sumworkdays into v_workdays from(select sum(workdays) sumworkdays,tno from tm group by tno)a1 where v_tno like a1.tno;
DBMS_OUTPUT.PUT_LINE(v_workdays);
exception
when NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到记录');
end findsumworkdays;
2.编写代码测试存储过程;
set serveroutput on;
begin
findsumworkdays('t001');
end;
3.编写一个函数,计算某个教师负责的经费总数;
create or replace function sum_fund(v_tno varchar2)
return number
as
sumfund number;
begin
select sum(pfund) into sumfund from myproject where v_tno=tno;
return sumfund;
end;
4.编写代码测试函数;
select teacher.*,sum_fund(tno) from teacher;
5.编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;
create or replace trigger teacher_salary
before insert or update of tsalary on teacher
for each row
when(new.tsalary>8000)
begin
:new.tsalary:=3000;
end;
6.编写代码测试触发器是否工作正常;
update teacher set tsalary=9200 where tno='t003';
insert into teacher(tno,tname,tsex,tsalary,tbirthday,dno) values('t009','小明','女',9800,To_date('17-10月-1980','DD-mon-yyyy'),'d001');
7.删除触发器;
drop trigger teacher_salary;
8.删除存储过程;
drop procedure findsumworkdays;
9.删除函数;
drop function sum_fund;
实验总结
总结实验过程中涉及到的知识点、实验过程中遇到的问题及解决方法。
通过这次实验,掌握数据库对象如触发器、存储过程和函数的定义和基本使用方法。
在编写存储过程的时候,想用DBMS_OUTPUT.PUT_LINE输出两个参数v_tno和v_workdays,结果会出错,只能输出一个参数。另外,在SQLPlus中运行PL/SQL块前,如果要将执行结果输出,需要先执行 set serveroutput on语句命令,在窗口里显示服务器输出信息。有一个疑问的地方是,在第一个存储过程中,需要两个参数,一个输入参数,一个输出参数,但是不太清楚输出参数是为什么需要的,存储工程的结果可以通过运行PL/SQL块输出。另外需要注意的是,在编写触发器的时候,更新或者插入新的内容的时候,需要在new前面加一个':',在‘=’前面也要加一个':'。删除触发器,存储过程和函数的语句比较相似。