oracle数据库中一个日志记录过程的应用.doc_第1页
oracle数据库中一个日志记录过程的应用.doc_第2页
oracle数据库中一个日志记录过程的应用.doc_第3页
oracle数据库中一个日志记录过程的应用.doc_第4页
oracle数据库中一个日志记录过程的应用.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

日志记录过程的应用1. 创建过程用到的序列和表:(附件:create squence and table.sql)- Create sequence create sequence SEQ_SYS_LOGWRITEminvalue 10001maxvalue 99999start with 10001increment by 1cycle;- Create tablecreate table t_sys_logrecord( task_id integer, task_name varchar2(30), table_name varchar2(30), task_sign varchar2(20), start_time date, end_time date, task_status integer, task_log varchar2(200), task_pos varchar2(200), row_count integer);comment on table t_sys_logrecord is 过程运行日志记录表;comment on column t_sys_logrecord.task_id is 任务ID;comment on column t_sys_logrecord.task_name is 程序名称;comment on column t_sys_logrecord.table_name is 目标表名;comment on column t_sys_logrecord.task_sign is 任务标志;comment on column t_sys_logrecord.start_time is 程序开始时间;comment on column t_sys_logrecord.end_time is 程序结束时间或出错时间;comment on column t_sys_logrecord.task_status is 任务状态;comment on column t_sys_logrecord.task_log is 任务日志;comment on column t_sys_logrecord.task_pos is 任务位置;comment on column t_sys_logrecord.row_count is 数据量;2. 创建过程代码:(附件:p_sys_logwrite.prc)create or replace procedure p_sys_logwrite( oi_task_id in out integer, iv_task_name in varchar2, iv_table_name in varchar2, iv_task_sign in varchar2, ii_task_status in integer, iv_task_log in varchar2, iv_task_pos in varchar2, ii_rowcount in integer default null)is/*- 功能描述:用于记录过程运行日志- 参数:- oi_task_id inout integer 任务ID,任务状态为1时做输出参数,任务状态为0和其它时做输入参数- iv_task_name in varchar2 任务名称- iv_table_name in varchar2 目标表名- iv_task_sign in varchar2 任务标志,任务的统计时间- ii_task_status in integer 任务状态,0 程序运行完成,1 程序运行中,其它 出错代码- iv_task_log in varchar2 任务日志,正常时为程序运行中或程序运行完成,出错时为出错信息- iv_task_pos in varchar2 任务位置,程序中的出错位置- ii_rowcount in integer 数据量,可选参数,缺省值为null- 操作表:t_sys_logrecord-*/begin - 对不同的任务状态,进行不同的日志处理 if ii_task_status = 1 then - 程序运行开始:获得新的任务ID,新建日志记录 select seq_sys_logwrite.nextval into oi_task_id from dual; insert into t_sys_logrecord ( task_id, - 任务ID task_name, - 程序名称 table_name, - 目标表名 task_sign, - 任务标志 start_time, - 程序开始时间 end_time, - 程序结束时间或出错时间 task_status, - 任务状态 task_log, - 任务日志 task_pos, - 任务位置 row_count - 数据量 ) values ( oi_task_id, iv_task_name, iv_table_name, iv_task_sign, sysdate, null, 1, 程序运行中, null, null ); elsif ii_task_status = 0 then - 程序运行完成:通过任务ID更新日志表中的任务状态和结束时间 update t_sys_logrecord set end_time = sysdate, task_status = 2, task_log = 程序运行完成, row_count = ii_rowcount where task_id = oi_task_id; else - 程序运行出错:通过任务ID更新日志表中的出错时间和出错信息 update t_sys_logrecord set end_time = sysdate, task_status = ii_task_status, task_log = substr(iv_task_log, 1, 200), task_pos = iv_task_pos, row_count = ii_rowcount where task_id = oi_task_id; end if; commit; - 程序不需要捕获异常,有错误发生时,系统会将异常传递给调用程序end;/3. 过程的使用方法该过程用于记录其它过程的运行日志,在过程中的三个地方被调用。分别为过程开始,过程结束和异常处理。 过程开始时调用该过程,自动生成过程运行的记录编号,记录过程开始运行时间。如果过程顺利运行完成,再调用该过程,根据已经生成的记录编号,更新过程运行的结束时间。如果过程没能顺利运行结束,而是因异常跳出。这时分三种情况,1是预设条件的正常跳出,即这种运行结果也是正常的,这种条件下记录结束时间和跳出位置。2是自定义异常跳出,需要记录跳出位置,出错原因。3是所有其它异常跳出,记录跳出位置,出错代码和出错信息。4. 结合一个过程,来看记录日志的具体使用。创建需要处理的表:tb_test_week (自造一些数据用于测试)。代码:create test table.sql创建过程:sp_test_week 代码:sp_test_week.prc- create table- Create tablecreate table TB_TEST_WEEK( STATIS_DATE DATE, TNAME VARCHAR2(30) not null, TABTYPE VARCHAR2(7);create or replace procedure sp_test_week( iv_date in varchar2, oi_return out integer)/* - 功能描述:测试记录日志过程的使用- 参数:- iv_date in varchar2 统计日期,格式:yyyymmdd- oi_return out integer 执行状态,0 正常,其它 出错 */ is vi_task_id integer; - 任务日志id 日志记录编号 vv_task_name varchar2(30); - 任务名 日志中记录的过程 vv_table_name varchar2(30); - 表名 日志中记录的过程主要关联的表,一般为目标表。当有多个时,写主要的那个就可以了。 vv_task_pos varchar2(50); - 任务位置 日志中记录的过程出错的位置 vi_err_code integer; - 出错代码 日志中记录的过程出错代码 vv_err_msg varchar2(200); - 出错信息 日志中记录的过程出借信息 vi_result integer; - 临时结果 前期作为临时变量作用,最后作用日志中记录的过程处理的数据的行数,只能记录其中之一。没有太大作用。 exc_return exception; - 程序中间返回自定义异常 exc_error exception; - 程序出错返回自定义异常 vd_date date; - 统计日期 begin vv_task_name := sp_test_week; vv_table_name := tb_test_week; - 程序运行开始,调用日志记录过程 vv_task_pos := 程序开始日志; p_sys_logwrite( vi_task_id, vv_task_name, vv_table_name, iv_date, 1, null, null, null); - 每个处理都需要给变量 vv_task_pos 赋值,以返指明程序位置 vv_task_pos := 检查输入参数; if (iv_date is null) then vi_err_code := -1; vv_err_msg := 没有输入统计日期参数; raise exc_error; end if; - 给日期型变量赋值 vd_date := to_date(iv_date,yyyymmdd); - 判断是否是周六。因为该过程只需要周六执行,其它时间不需要执行 vv_task_pos := 判断是否是周六; if to_char(vd_date,D) 7 then vi_err_code := 2; vv_err_msg := 不是周六,不须运行; oi_return := 0; raise exc_return; end if; - 判断数据源是否存在,如果需要处理的数据源不存在,抛出异常,直接跳出 vv_task_pos := 判断源数据源是否存在; select count(*) into vi_result from tb_test_week a where a.statis_date = vd_date and rownum = 1; if vi_result = 0 then vi_err_code := -40000; vv_err_msg := 数据源 tb_test_week 没有统计日数据; raise exc_error; end if; - 主要处理开始 以下代码才是该过程真正要做的事情 - 举一个简单的示例,只是更新 tb_test_week 中相应日期的数据 update tb_test_week t set t.tname = lower(t.tname) where t.statis_date = vd_date; - 得到数据量 vi_result := sql%rowcount; commit; -处理结束 - 程序运行完成,正常结束。调用日志记录过程,记录过程运行情况 vv_task_pos := 程序结束日志; p_sys_logwrite(vi_task_id, null, null, null, 0, null, null, vi_result); oi_return := 0;exception when exc_return then /* description 程序中间返回,记录程序结束日志,正常返回 * call masasys.sp_kr_sys_log * field-mapping oi_return = (0) */ - 程序中间返回,记录程序结束日志。这里指的是正常返回。比如在此程序中,给定的日期不是周六 p_sys_logwrite(vi_task_id, null, null, null, vi_err_code, vv_err_msg, vv_task_pos, vi_result); oi_return := 0; when exc_error then - 程序出错返回。程序遇到了自定义的异常,比如本例中的给定日期的数据源不存在 rollback; p_sys_logwrite(vi_task_id, null, null, null, vi_err_code, vv_err_msg, vv_task_pos, vi_result); oi_return := vi_err_code; when others then - 程序出错

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论