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 (编辑

刘忠洪) 


本文标签: 触发器 数据 数据库 工作