欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle数据库对象 (Oracle实验)

程序员文章站 2022-06-02 16:05:27
...

实验目的

掌握数据库对象如触发器、存储过程和函数的定义和使用。

实验要求

熟悉实验室实验环境,阅读实验预备知识,掌握本实验内容涉及知识点的基本用法,了解实验中故障排除的基本方法。实验中根据实验步骤要求,写出相应的代码运行,分析代码书写是否正确,根据步骤要求独立完成实验报告。

实验环境

Oracle 10gwindows 2003

实验内容和步骤

1.编写带有一个输入参数和一个输出参数的存储过程,输入参数为教师的编号类型,输出参数与tm表的workdays类型一致,存储过程的功能是,根据输入参数教工号的值,计算出该教师为其参与的所有项目的工作总天数;
create or replace procedure sum_work_day(str VARCHAR2)
as 
     sum_workday number;
begin 
     select sum(workdays) into sum_workday
     from tm where tno=str;
     if sum_workday is null then 
     dbms_output.put_line('There are not this teacher number!');
     rollback;
     return;
     end if;
     dbms_output.put_line(sum_workday);
end sum_work_day;
2.编写代码测试存储过程;
set serveroutput on;
--方法一:
exec sum_work_day('t001');
--方法二:
call sum_work_day('t001');
--方法三:
begin 
     sum_work_day('t003');
end;
3.编写一个函数,计算某个教师负责的经费总数;
create or replace function sum_fund(str VARCHAR2)return number
as 
     sumfund number;
begin
     select sum(pfund) into sumfund 
     from myproject where tno=str;
     return sumfund;
end;
4.编写代码测试函数;
var sumfund number;
exec :sumfund:=sum_fund('t006');
print sumfund;   
5.编写一个行级前触发器,当插入、修改Teacher表中教师的工资时,如果工资高于8000,则把工资改为8000;
create or replace trigger teachersalary
before 
      insert or update on teacher
      for each row 
      when (new.tsalary>8000)
begin
      :new.tsalary:=8000;
end;
6.编写代码测试触发器是否工作正常;
update teacher set tsalary=9000 where tno='t001';
select * from teacher where tno='t001';
7.删除触发器;
drop trigger teachersalary;
8.删除存储过程;
drop procedure sum_work_day;
9.删除函数;
drop function sum_fund;