Oracle(七)触发器、函数和存储过程
*******************=========触发器=========*****************
:old 代表之前的值
:new 更改之后现在的值
这两个值 只能在 for each row 中使用
update语句 :old :new
insert语句 :new
delete语句 :old
--创建一个teacher_log (只要有人动teacher表,数据就会记录在teacher_log表中)
create table teacher_log(
logid number not null,
old_value varchar2(200),
create_date date,
log_type number,
tno number
)
--给logid设置主键
alter table teacher_log add constraint pk_teacher_logid primary key(logid);
--创建序列
create sequence sq_teacher_logid
minvalue 1
maxvalue 999999999
start with 1
increment by 1
cache 20;
--创建触发器 or replace 如果存在 则 修改
create or replace trigger tr_teacher
after insert or update or delete --会在增删改之后 触发
on teacher for each row
--声明
declare
v_old_value teacher_log.old_value%type;
v_type teacher_log.log_type%type;
v_tno teacher_log.tno%type;
begin
if inserting then
v_type:=1; --新增
v_tno :=:new.tno;
v_old_value:=:new.tno||'====='||:new.tname;
elsif deleting then
v_type:=2; --删除
v_tno :=:old.tno;
v_old_value:=:old.tno||'====='||:old.tname;
else
v_type:=3; --修改
v_tno :=:old.tno;
v_old_value:=:old.tno||'====='||:old.tname||'===='||:new.sal;
end if;
--将记录写入到 teacher_log
insert into teacher_log values
(sq_teacher_logid.nextval,v_old_value,sysdate,v_type,v_tno);
end tr_teacher;
***************=========函数=======******************
--函数 function
create or replace function fn_teacher_tid
(
f_tid varchar2
)
return varchar2
is
f_result teacher.tid%type;
begin
if length(f_tid)!=18 then
dbms_output.put_line('身份证不正确');
else
dbms_output.put_line('身份证正确');
end if;
--给返回值赋值
f_result:=substr(f_tid,1,6)||'********'||substr(f_tid,15);
return f_result;
end fn_teacher_tid;
--调用函数
select fn_teacher_tid(110101198603304014) from dual;