05 Oracle数据库对象 实验报告

                                          05 Oracle数据库对象 实验报告

                                                                          广州大学学生实验报告

                                   开课学院及实验室:计算机科学与工程实验室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前面加一个':',在‘=’前面也要加一个':'。删除触发器,存储过程和函数的语句比较相似。

你可能感兴趣的:(数据库学习)