Oracle数据库中的函数,包和触发器
函数:
-
-
/** 函数和存储过程非常的相似,唯一的不同的就是函数有返回值。 **/ create or replace function firstFun return varchar2 is begin return 'Hello World'; end firstFun;
-
/** 计算年薪是多少? **/ create or replace function paramFun(salary number) return number is begin return salary*12; end paramFun;
-
-
-
-
/** 这里是包头,主要是对数据的定义 **/ create or replace package firstPack is --定义一个变量 v_bonus number:=200; --定义一个函数 function yearSalary(salary number) return number; --定义一个存储过程 procedure myrop; end firstPack;
/** 包主体:对申明的实现 计算年薪 年薪=月薪*12+奖金 **/ create or replace package body firstPack is --对包头申明函数的实现 function yearSalary(salary number) return number is begin return salary*12+v_bonus;--这里用到了前面申明的变量 end; --对存储过程的实现 procedure myrop is begin --向学生表插入一条数据 insert into tab_stu(stu_id,stu_name,stu_age,class_id) values(9,'凯南',21,2); commit; end; end firstPack;
-
-
-
-
- 。在例子中会说明。
-
/** 创建一个触发器't_back_tab_sut' 当表tab_stu中的记录执行删除操作之后执行 **/ create or replace trigger t_back_tab_sut after delete on tab_stu --当行级触发器被触发时,如果要访问插入,更新或删除的记录中的值。可以使用 --NEW:访问操作完成后的值。 --Old:访问操作完成前的值。 --也就是可以取到你插入或更新或删掉的新或旧的数据。 referencing new as new old as old for each row --表示触发器是行级触发器 declare r_tab_stu tab_stu%rowtype; begin --取到删除后的数据 r_tab_stu.stu_id:=:old.stu_id; r_tab_stu.stu_name:=:old.stu_name; r_tab_stu.stu_age:=:old.stu_age; r_tab_stu.class_id:=:old.class_id; --插入到备份表中 insert into tab_stu_back2(stu_id,stu_name,stu_age,class_id) values(r_tab_stu.stu_id,r_tab_stu.stu_name,r_tab_stu.stu_age,r_tab_stu.class_id); --这里不能有commit语句 --因为如果这里有commit的话,那用户执行的delete操作就不能回滚了。 --可以理解为这里的insert和用户的delete语句是一个事务。 end t_back_tab_sut;
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。