oracle里面使用临时表解决表冲突一例(转贴)

转载 2004年09月26日 23:18:00

平台:windows 2000 server sp3

数据库:Oracle 9.0.1.1.1

现场描述:用户抱怨不能同时对多个单位进行数据处理,执行出现的错误信息为:

SQL> exec sp_hyb_da_ryxx_dwbh_test('331028')

BEGIN sp_hyb_da_ryxx_dwbh_test('331028'); END;

*

ERROR 位于第 1 行:

ORA-02055: 分布式更新操作失效;要求回退

ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小

ORA-06512: 在"SIDB.SP_HYB_DA_RYXX_DWBH_TEST", line 55

ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小

ORA-06512: 在"SIDB.SP_HYB_DA_RYXX", line 145

ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小

ORA-06512: 在"SIDB.SP_HYB_DA_RYXX_YZ1", line 25

ORA-20901: 过程SP_HYB_DAXX出错;grbh = 1000607288 ORA-02049: 超时:

分布式事务处理等待锁定

请联系系统管理员;1

ORA-06512: 在line 1

经检查后发现是后台存储过程中使用了‘临时’表,这些临时表用于临时保存部分正式表的数据,应用程序存储过程的代码形如

DELETE <TEMP TABLE>;

INSERT INTO <TEMP TABLE> SELECT *FROM <NORMAL TABLE> WHERE ;

这种方法造成了在同时执行的时候由于对<TEMP TABLE>锁定的等待而只能同时进行一个单位的数据处理。

可以通过使用Oracle真正意义上的临时表消除对临时表的锁定。

临时表的基本定义是:

数据库中的所有会话均可以访问临时表,但只有插入数据到临时表中的会话才能看到本身插入的数据。可以把临时表指定为事务相关(默认)或者是会话相关:

ON COMMIT DELETE ROWS:指定临时表是事务相关的,Oracle在每次提交后截断表。

ON COMMIT PRESERVE ROWS:指定临时表是会话相关的,Oracle在会话中止后截断表。

通过使用Oracle的临时表后可以并行的对数据进行处理,有效的提高了数据处理的速度。

附:创建临时表的例子

CREATE GLOBAL TEMPORARY TABLE <TEMP TABLE>

AS

SELECT *FROM <NORMAL TABLE> WHERE 1 = 2;

CREATE INDEX <INDEX NAME> ON <TEMP TABLE> (<COLUMN NAME>);

oracle临时表的用法总结

关键字:基本概念,原理临时表的特点,什么时候用  前段时间,新公司的面试官问了一个问题,临时表的作用,以前我们用缓存中间数据时候,都是自己建一个临时表。其实oracle本身在这方面就已经考虑很全了,除...
  • wyzxg
  • wyzxg
  • 2007年11月13日 15:49
  • 48828

oracle中创建临时表方法

1.首先必须有权限: 创建临时表的用户好像必须要有CREATE ANY TABLE 如果你有这个权限的还 按照上面两位说得一定可以。   2.建表的语法示例: -------创建虚拟表 ...
  • gal1024
  • gal1024
  • 2014年11月11日 23:18
  • 753

oracle 全局临时表

临时表(Tempotary table)用于保存事务或会话期间的中间结果集。临时表中保存的数据只对当前会话可见,所有会话都看不到其他会话的数据;即使当前会话已经提交了(commit)数据,别的会话也看...
  • u013412535
  • u013412535
  • 2015年04月07日 13:38
  • 2032

Java 开发创建oracle临时表语句

将Connection设置为非自动提交setAutoCommit(false) 1.CREATE   GLOBAL   TEMPORARY   TABLE   TABLENAME   (     ...
  • hamov
  • hamov
  • 2016年06月24日 19:50
  • 2529

oracle复制表结果与数据,以及创建临时表

1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create...
  • luguling200802544
  • luguling200802544
  • 2015年06月12日 16:36
  • 1681

普通物理表、临时表和TABLE(函数)的执行效率对比

普通物理表、临时表和TABLE的用途各不相同,普通表一般存放需要长期保存的数据,临时表存放某个事务或会话过程中的临时数据,array是oracle中的数组,也可以用于存放临时数据,或在OODB中使用。...
  • lingzihan1215
  • lingzihan1215
  • 2012年04月09日 11:25
  • 1241

Oracle 11g笔记——临时表

一、临时表 临时表是指表中的数据是临时存在的。临时表的数据只存在一次会话或一个事务中,而临时表的定义永久存在数据字典中。 我们可以用SQL语句CREATE GLOBAL TEMPORARY TAB...
  • lJean
  • lJean
  • 2016年05月10日 09:12
  • 818

Oracle查询问题引发临时表使用

分析某段时间内,刷卡金额大于1000的卡的消费记录,写法如下。 SQL语句写法:select a.dno,  a.dcard, a.dcard_money, a.dcard_type, a.ddate...
  • ghs79
  • ghs79
  • 2016年07月19日 19:25
  • 1015

Oracle临时表 和 插入多条语句 用法

1、创建临时表  ON COMMIT PRESERVE ROWS 事务级别的,默认是回话级别的 DECLARE                                            ...
  • cddchina
  • cddchina
  • 2015年09月16日 18:13
  • 1882

oracle存储过程中使用临时表

1、存储过程中动态创建表失败,提示权限问题,execute immediate 'create global temporary t1 as select * from table1';  解决: ...
  • jc_benben
  • jc_benben
  • 2016年08月04日 15:33
  • 672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle里面使用临时表解决表冲突一例(转贴)
举报原因:
原因补充:

(最多只允许输入30个字)