Oracle数据库对象 (Oracle实验)

实验目的

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

实验要求

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

实验环境

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;

 

你可能感兴趣的:(Oracle)