度量快速开发平台-专业、快速的软件定制快开平台

标题: 怎么查看oracle数据库的全局临时表是否正确的插入了数据 [打印本页]

作者: fteair    时间: 2020-2-8 17:50

作者: 万望    时间: 2020-7-20 23:32
标题: 怎么查看oracle数据库的全局临时表是否正确的插入了数据

今天遇到一个这样的问题,程序中有一个用来存储程序报错信息的临时表,就是每次当程序运行出错的时候,就会将相应的报错信息插入到临时表中,然后调用临时表中的数据在界面上显示给用户,然后今天出现的问题是,报错的界面出现了,但是没有正确的显示出报错信息,而是一片空白。在这个问题情景下,我就有了一个想知道数据是否正确插入到了临时表,但是我们都知道临时表是session级的,一个session是无法查看到另一个session临时表的数据的,所以,问题也就来了。本文就这个问题,提供下面的这种处理思路,如果你对oracle中的临时表还不是特别了解,可以先参考下博客中《oracle临时表用法小结》这篇文章。

1、创建临时表

为了方便后面写代码,先把临时表的结构表示出来,可以看下面的这段创建临时表的代码。

  1. -- 创建临时表
  2. CREATE GLOBAL TEMPORARY TABLE CMX_ERRORS_TMP
  3. (
  4.   SEQ_NUM          NUMBER,
  5.   ERROR_SOURCE     VARCHAR2(100),
  6.   ERROR_MESSAGE    VARCHAR2(4000),
  7.   CREATION_DATE    DATE DEFAULT SYSDATE NOT NULL,
  8.   CREATED_BY       NUMBER DEFAULT -1 NOT NULL,
  9.   DESCRIPTION      VARCHAR2(100)
  10. )
  11. ON COMMIT PRESERVE ROWS;
复制代码

2、创建一个和临时表结构一样的普通表

创建一个普通表,用来存储临时表中的记录。

-- 创建一个普通表CREATE TABLE cmx_tmp_bak AS SELECT * FROM cmx_errors_tmp WHERE 1 = 0;

3、在临时表上创建一个触发器

在临时表上面创建一个触发器,以实现每当往临时表中插入一条记录的时候,同时也将这条记录插入到前面建的那个普通表中。

-- 创建before insert触发器CREATE OR REPLACE TRIGGER cmx_errors_bak_trigger  BEFORE INSERT ON cmx_errors_tmp  FOR EACH ROWBEGIN  INSERT INTO cmx_tmp_bak    (seq_num, error_source, error_message, creation_date, created_by, description)  VALUES    (:new.seq_num, :new.error_source, :new.error_message, :new.creation_date, :new.created_by, :new.description,);END;

这里有个地方需要注意的是,oracle不允许在触发器中加commit和rollback。



作者: 张兴康    时间: 2020-7-21 13:57

作者: 陈晓龙    时间: 2020-7-21 14:10

作者: 陈晓龙    时间: 2020-7-21 14:10





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2