您的位置:首页 > 数据库 > Oracle

oracle存储过程和触发器

2016-05-28 10:42 429 查看
--过程

创建过程,create procedure语句可以用于创建过程,简化语法如下:

create [or replace] procedure procedure_name

[(parameter_name [in|out|in out] type [,...])]

{is | as}

begin

procedure_body

end parameter_name;

其中,or replace说明如果该过程已经存在,则用新的过程代替它。该选项可以用来修改一个现有过程;in|out|in out定义了参数的模式。in为默认的模式。type指定参数的类型。 procedure_body包含执行过程任务的sql和pl/sql语句。

--创建一个过程,给某个教师加工资
create or replace
procedure update_t_sal(t_tno in t.tno%type, t_num in number)
as
t_count_id integer;
begin
select count(*) into t_count_id from t
where t_tno=tno;
if t_count_id = 1 then
update t
set sal=sal+t_num
where  t_tno=tno;
commit;
end if;
exception
when others then
rollback;
end update_t_sal;

--过程的调用
call update_t_sal('t1', 100);

--删除过程
drop procedure update_t_sal;


--触发器

触发器(trigger)是当特定的SQL DML语句,如insert,update或delete语句在特定的数据库表上运行时,由数据库自动运行(或者用技术来讲是自动激活)的过程。触发器对于实现表中某个列值的高级变更审计等功能非常有用。简化语法如下:

create [or replace] trigger trigger_name

{before|after|instead of} trigger_event

on table_name

[for each row [when trigger_condition]]

begin

trigger_body

end trigger_name

其中,for each row指定触发器是一个行级触发器,即当触发器激活时,trigger_body中包含的代码会为每一行运行一次,如果for each row没有,则触发器是一个语句级触发器,即不管所作用的行有多少,当触发器激活时,trigger_body中包含的语句只运行一次。befor指定触发器在触发事件运行之前激活,after是定触发器在触发事件运行之后激活,instead of指定用触发器激活代替触发事件的运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: