日期:2014-05-17  浏览次数:20764 次

oracle 10g 临时表问题
创建了一个事物级临时表 temp_grbh
插入了一些一些grbh的值,
在查询另一个表时这样操作
SQL code

select * from yw_ryjbxx ry where exists (select 1 from temp_grbh where ry.grbh = temp_grbh.grbh)


yw_ryjbxx表有记录但是关联临时表后查不到记录,直接查询临时表temp_grbh又有记录。为什么呢?

------解决方案--------------------
--确认下操作提交了吗?在提交的时候,temp_grbh事务级临时表已经被清空了,如果没有提交则应该有数据

SQL code


select ry.* from yw_ryjbxx ry where  exists(select 1 from temp_grbh where name = ry.name  )

------解决方案--------------------
1、ON COMMIT DELETE ROWS (TRANSACTION级的临时表),临时表是事务指定,每次提交后ORACLE将截断表。
2、ON COMMIT PRESERVE ROWS(SESSION级的临时表),临时表是会话指定,当中断会话时ORACLE将截断表。

建议把你的事务级临时表建表语句贴出来看看,估计就是这的问题~你试下吧
------解决方案--------------------
楼主:
你的子查询后面的条件如果不成立,那么子查询永远不会返回结果集(即使你"select 1 from ……”),所以exists 永远不成立,所以最后什么也查不到。
比如:select * from emp WHERE EXISTS (SELECT 1 FROM dept WHERE 1=2);结果什么查不到