admin 管理员组文章数量: 1184232
2024年4月16日发(作者:工作地点英文base)
维普资讯
第21卷第3期
妇 茵毛 唐
Vo1.21,No.3
2007年9月
Jiangxi Nonferrous Metals
Sep.2007
文章编号:1005-2712(2007)03—0041—03
基于Oracle数据库存储过程与触发器的应用
刘小生,张世良
(江西理工大学,江西赣州341000)
摘 要:探讨了如何利用ORACLE的存储过程与触发器来创建自动流水号及维护系统的安全与审查方面的应用,
从而促使数据库系统更具有主动进行服务的功能。
关键词:过程;触发器;流水号;oracle数据库
中图分类号:TP311.138or 文献标识码:A
0引 言 1自动增加流水号的创建
一
般城市规划管理信息系统数据库在逻辑上
该规划信息管理系统采用Oracle9i数据库【l】。数
包括工作流数据库、内务管理数据库及业务数据
据表的关系非常复杂.各个数据表需要有唯一标识
库。其中工作流数据库主要存贮工作流运行过程的 符。如果以几个字段合起来作联合主键时,联合主键
数据,记录流程的执行状态和时间。根据工作流定 在数据库表插入、更新和删除记录时效率较低。且作
义数据和工作流实例数据。进行流程监控和工作流 外键时还会使引用表字段过多。从而影响数据库的
程的查询;内务管理数据库主要存贮部门、工作人 整体性能。因此一般每个表都用各自的流水号作为
员、角色及其权限管理的数据;业务数据库主要存 主键。由于流水号是数据记录的唯一标识。不会重
贮系统所处理的业务数据,业务数据的定义由在元 复。如内务管理子系统中的受理案件表(表1),表中
数据库中的属性元数据记录,其生成时间、质量方 就有项目序号、项目编号、剩余天数这3个字段要用
面的属性由实例数据记录。为了更有效地提高数据 到流水号。在这个表中。其项目序号是客户看不到
库的整体性能,提高系统的运行时间。用好存储过 的,仅作为系统内部用来检索的标志;项目编号,一
程与触发器就显得十分重要。存储过程实质上是一 般是由当年的年份后面扩充5位再加顺序号组成。
个代码模块,它执行某些操作并返回该程序是否成
由于每一年的顺序号都要从头开始。因此它可以由
功执行的标志。触发器是一种特殊类型的存储过
创建过程与触发器共同来完成。当然也可选择通过
程,当使用UPDATE、INSERT或DELETE一种或多
直接创建触发器来完成流水号的自动增加。
种数据修改操作时。它就会触发。触发器还可以用
下面介绍直接用触发器来完成创建。其具体代
来查询表的操作。执行复杂的SQL语句来强制复杂
码如下:
的业务规则或要求,助于强制引用完整性。以便在
create or replace trigger acceptcaseb
—.
trigger be-
添加、更新或删除表中的行时保留表之间已定义的
fore insert on ghoauser.acceptcaseb for each rOW
关系。
一
其中GHOAUSER为表所属的用户
触发器的功能可用于许多方面。笔者对某市规
一
其中acceptcaseb trigger为触发发器的名
划信息管理系统如何利用数据库的存储过程与触
declare
发器来创建自动流水号及进行系统安全与审计作
maxcount integer;~用来暂存表中的记录数
了一定探讨。
maxvalue integer;~用来暂存系统日期转换值
收稿日期:2007—04—10
基金项目:江西省自然科学基金项 ̄(061 1044);江西省教育厅科技项[2007—2o61
作者简介:刘小生(1963一),男,江西新余人,教授,博士后,主要从事GIS与测绘的科研与教学工作。
维普资讯
42
南茵毛童唐 9121
项目编号
PROJNUM
Varchar
否
编号规则
DECLPROC varchar
项目名称
PROJNAME
Varchar
收文编号
PAPERNUM Varchar
项目序号
PROJSEQUENCE
Varchar
申报人
DECL RE
Varchar
办文时限
TIMEUMrI.
NumeriC
主办科室
WORKOFF1CE Varchar
收文日期
PAPERDATE
Datetime
批复日期
ANSW.ERDATE
Datetim
剩余天数
REMAINDAYS Varchar
com
_
num integer;~暂存USERCODE最大值
IF(To—Char(sysdate,’dy’)NOT IN(’星
begin
select
加 如啪加加m
count(*)into maxcount from ghoaus-
卯
期六’,’星期日’)OR
To
_
Char(sysdate,’MMDD’)NOT IN
er.acceptcaseb;
/ 去除一年当中星期六,星期日 /
select to
_
number(to_char(sysdate,’yyyy (’0101’,’0102’,’0103’,’0104’,’
’)) 1 00000 into maxvalue from dual;
是
0105’,’0106’,’0107’,’0108’))
if maxcount>0 then
/ 去除一年当中法定新年假期。还可以在这里
select max(usercode)into com_num
增加需要扣除的日期 /
rfom ghoauser.acceptcaseb;
THEN
if maxvalDe<com
_
num then update GHOAUSER.ACCEIyI℃ASEB set re—
:new.usercode:=com
num+1;
_
maintdays=remaindays-1
else
where REMAINDAYS>0;
:new.usercode:=maxvalue+1:
END IF;
end if; end;
else
一
通过JOB完成功能,其中JOB2为序号
:new.usercode:=maxvalue+1:
variable job2 number;
end if;
begin
end;
一
下列语句功能:每天24点时执行一次更
在剩余天数字段是用来提醒办公人员,他所办
新操作
的这个案件还剩几天要办完,以促使这个案件在规
dbms
__
job.submit(:job2,ACCEPTCASEB_RPO;’,
定的办文时限内完成。因此,当系统日期改变了,剩
SYSDATE,’sysdate+24/24+l’);
余天数字段就必须自动减1,另外,若遇到节假日,
end;
星期六,星期日等,还应从中自动剔除。具体实现代
begin
码如下所示:
dbms
__
job.run(:job2);
CREATE OR REPLACE PROCEDURE “
end;
GHOAUSER”。“ACCEPTCASEB
_
RPO’’
~
若要移去时,可以用以下语句来取消这个
AS
JOB了运行
Begin
begin
/ 触发器名称:ACCEPTCASEB_RPO*/
dbms
_
job.remove(:job2);
触发器所在表名称:ACCEPTCASEB*/
end;
/ 当前用户:GHOAUSER*/
维普资讯
第3期 刘小生,等:基于Oracle数据库存储过程与触发器的应用 43
2用触发器实现数据的审计与安全 一在期六、日不允许修改R0LEB表
城市规划管理信息系统中的每一项业务都由不 if(to_char(sysdate,’DY’)IN(’SUN’,
同的用户角色来承担。每一项业务都涉及业务的申
‘SAT’))
请、初审、复审、批准等一系列办文流程管理,并且每
RAISE
APPLICATION
_
_
ERROR(一20600,
项任务间都有严格的逻辑关系,每项任务都有明确 ’不能在周末修改表ROLEB’);
的工作内容和不同的权限。因此必须用触发器来保
end if;
证在关键表上的任何插入、更新或者删除动作以及
IF(INSERTING)THEN
当前时间、用户名都会被记录到审计表(TEMP_Au—
INSERT INTO Temp
_
audit VALUES
dit)中闭,以便日后通过审查可以了解哪位用户曾经
(user,’I’,now(),NEW.PURVIEW);
修改了那些数据以及这些数据在修改前的状态。提
ENDIF
供哪位用户更改了他人记录之证据;或者使用触发
IF(updating)THEN
器不允许操作人员在周末修改限定的表。如在表2
INSERT INT0 emp
—
laudit values(user,
中规定了不允许非工作时间(或周末)修改数据库。
’U’,now(),NEW.PURVIEW);
表2角色表
ENDIF;
IF(DELETING1 THEN
INSERT INTO emp
—
audit values(user, ’D’,
now(),NEW.PURVIEW);
END IF;
要完成这个功能,首先应建立审计表,然后创建
FND
以下触发器:
CREATE TABLE temp
_
audit(
3结语
Username varchar2(10),
通过城市规划管理信息系统的开发与运行可
operation varchar2(6),
知.运用数据库存储过程与触发器技术,不仅可提高
oper_date date,
系统的执行效率,而且充分考虑了安全问题,从而保
DATA varchar2(1 2)
证了系统在技术方面的领先性、实用性和安全性。随
);
着标准化工作的进行,触发器机制将越来越完善,可
CREATE 0R REPLACE TRIGGER AU—
移植性将越来越好。触发器的主动性功能将会越来
DIT--TRIGGER BEFORE INSERT
越强。因此,通过使用触发器与存储过程来实现各种
0R DELETE 0R UPDATE 0N GH0AUSER.
主动服务的功能具有广阔的前景
ACCE眦ASEB
BECTN
参考文献:
一一
【1 赵松涛.Oracle9i数据库系统管理【M].北京:人民邮电出版社,
一
在emp_audit里创建一行,反映对 oo ・
R0LEB表的操作 等‘。 P 编蠲 晾冲
The Application of Stored Procedure and Trigger Based on Oracle Database
LIUXiao——sheng,ZHANG Shi-liang
(Jiangxi University of Science and Technology,Ganzhou 341000,China)
Abstract:This article has discussed to establish automatic serial number and maintain safety and examine of
system,which makes database system have the function of serving initiatively.
Key words:procedure;tirgger;serial number;oracle database (编辑
:
刘忠洪)
版权声明:本文标题:基于Oracle数据库存储过程与触发器的应用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713247852a625848.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论