触发器集成应用实例.docx
- 文档编号:2976335
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:10
- 大小:122.27KB
触发器集成应用实例.docx
《触发器集成应用实例.docx》由会员分享,可在线阅读,更多相关《触发器集成应用实例.docx(10页珍藏版)》请在冰豆网上搜索。
触发器集成应用实例
触发器应用实例
在Novell统一身份认证系统的集成项目中,需要由应用系统厂商开发触发器来将中间表的数据触发到正式表结构中。
由于有时候客户不希望与厂商再签合同,所以会自己来做,这时候就需要我们提供一个之前集成过的系统的触发器实例。
由于每个系统的表结构千差万别(有的系统有两张表,有的系统三张表,有的系统五张表......),这里只提供一种相对简单的表结构做为参考。
1.系统表结构
以下为某应用系统基本表结构:
部门表t_sys_dept
图表11
用户表t_sys_user
图表12
部门与用户关系表test_idm_map
图表13
2.建立中间表
由于在Novell的目录eDirectory中,目前只把OrganizationalUnit和User类作为存储组织和用户信息的主类,所以建立中间表中只需要两个表,分别用来对应部门和用户。
2.1.部门中间表
createtabletest_idm_dept
(
avic_Dept_CodeVARCHAR2(50)primarykey,
avic_Dept_NameVARCHAR2(50)
);
2.2.用户中间表
createtabletest_idm_user
(
AVICCNVARCHAR2(50)primarykey,
Avic_PasswordVARCHAR2(50),
avic_psn_nameVARCHAR2(50),
avic_GenderVARCHAR2(50),
avic_actri_MailVARCHAR2(50),
avic_Office_TelVARCHAR2(50),
avic_Dept_CodeVARCHAR2(50),
avic_Dept_NameVARCHAR2(50)
);
3.建立触发器
部门表和用户表的触发器主要有Insert、Update、Delete三种触发行为,分别对应数据的建立、更新和删除。
3.1.建立数据
3.1.1.部门表Insert
createorreplacetriggerIDM_DEPT_INSERT
beforeinsertontest_idm_dept
foreachrow
declare
zj_dept_idVARCHAR2(50);
newguidVARCHAR2(50);
bianmaVARCHAR2(50);
begin
---根据员工账号,处理员工信息
begin
selectdeptidintozj_dept_idfromtest_idm_maptwheret.bianma=:
new.avic_Dept_Codeandt.deptidin(selectd.idfromt_sys_deptdwhered.available='1');
EXCEPTION
WHENOTHERSTHEN
zj_dept_id:
=null;
end;
ifzj_dept_idisnotnullthen
---组织编码存在,不存在的情况手工处理
---更新组织表
updatet_sys_deptt
sett.name=:
new.avic_Dept_Name
wheret.id=zj_dept_id;
else
selectsys_guid()intonewguidfromdual;
insertintot_sys_dept(id,name,available,parent_id)values(newguid,:
new.avic_Dept_Name,'1','1111111111111111');
begin
selectt.bianmaintobianmafromtest_idm_maptwheret.bianma=:
new.avic_Dept_Code;
EXCEPTION
WHENOTHERSTHEN
bianma:
=null;
end;
ifbianmaisnullthen
insertintotest_idm_map(deptid,bianma,deptname)values(newguid,:
new.avic_Dept_Code,:
new.avic_Dept_Name);
endif;
endif;
endIDM_DEPT_INSERT;
3.1.2.用户表Insert
createorreplacetriggerIDM_USER_INSERT
beforeinsertontest_idm_user
foreachrow
declare
zj_user_idVARCHAR2(50);
deptidVARCHAR2(50);
begin
---根据员工账号,处理员工信息
begin
selectt.id
intozj_user_id
fromt_sys_usert
wheret.ACCOUNT=:
new.AVICCN
andt.available='1';
EXCEPTION
WHENOTHERSTHEN
zj_user_id:
=null;
end;
--根据机构编码找到机构的id
begin
selectt.deptid
intodeptid
fromtest_idm_mapt
wheret.bianma=:
new.avic_Dept_Code;
EXCEPTION
WHENOTHERSTHEN
deptid:
=null;
end;
ifzj_user_idisnullthen
---员工账号不存在
---插入员工表
selectsys_guid()intozj_user_idfromdual;
insertintot_sys_usert
(id,available,account,password,email,name,dept_id,sex2,phone)
values
(zj_user_id,
'1',
:
new.AVICCN,
:
new.Avic_Password,
:
new.avic_actri_Mail,
:
new.avic_psn_name,
deptid,
:
new.avic_Gender,
:
new.avic_Office_Tel);
else
---员工账号已存在
---更新员工表
updatet_sys_usert
sett.dept_id=deptid,
t.name=:
new.avic_psn_name,
t.password=:
new.Avic_Password,
t.phone=:
new.avic_Office_Tel,
t.sex2=:
new.avic_Gender,
t.email=:
new.avic_actri_Mail
wheret.available='1'andt.ACCOUNT=:
new.AVICCN;
endif;
endIDM_USER_INSERT;
3.2.更新数据
3.2.1.部门表Update
createorreplacetriggerIDM_DEPT_UPDATE
beforeupdateontest_idm_dept
foreachrow
declare
zj_dept_idVARCHAR2(50);--组织id
begin
dbms_output.put_line('ddddddd'||:
new.avic_Dept_Code);
---根据员工编号,处理员工信息
begin
selectdeptidintozj_dept_idfromtest_idm_maptwheret.bianma=:
new.avic_Dept_Codeandt.deptidin(selectd.idfromt_sys_deptdwhered.available='1');
EXCEPTION
WHENOTHERSTHEN
zj_dept_id:
=null;
end;
dbms_output.put_line('ddd'||zj_dept_id);
ifzj_dept_idisnotnullthen
--如果找到组织id,更新组织名称信息
updatet_sys_deptt
sett.name=:
new.avic_Dept_Name
wheret.id=zj_dept_id;
endif;
endIDM_DEPT_UPDATE;
3.2.2.用户表Update
createorreplacetriggerIDM_USER_UPDATE
beforeupdateontest_idm_user
foreachrow
declare
deptidVARCHAR2(50);
begin
--根据机构编码找到机构的id
begin
selectt.deptid
intodeptid
fromtest_idm_mapt
wheret.bianma=:
new.avic_Dept_Code;
EXCEPTION
WHENOTHERSTHEN
deptid:
=null;
end;
---根据员工编号,处理员工信息
updatet_sys_usert
sett.dept_id=deptid,
t.name=:
new.avic_psn_name,
t.password=:
new.Avic_Password,
t.phone=:
new.avic_Office_Tel,
t.sex2=:
new.avic_Gender,
t.email=:
new.avic_actri_Mail
wheret.available='1'andt.ACCOUNT=:
new.AVICCN;
endIDM_USER_UPDATE;
3.3.删除数据
3.3.1.部门表Delete
createorreplacetriggerIDM_DEPT_DELETE
beforedeleteontest_idm_dept
foreachrow
declare
zj_dept_idVARCHAR2(50);
begin
---根据员工账号,处理员工信息
begin
dbms_output.put_line('ddddddd'||:
old.avic_Dept_Code);
selectdeptidintozj_dept_idfromtest_idm_maptwheret.bianma=:
old.avic_Dept_Codeandt.deptidin(selectd.idfromt_sys_deptdwhered.available='1');
EXCEPTION
WHENOTHERSTHEN
zj_dept_id:
=null;
end;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 触发器 集成 应用 实例