我用VB连接oracle数据库时,出现如下情况:            CREATE   GLOBAL   TEMPORARY   TABLE   USERYHM
            (   
              ID         NUMBER(10)   NOT   NULL,                       
              NAME     VARCHAR2(50)   
              )   
            ON   COMMIT   PRESERVE   ROWS;  用vb代码往临时表里插入数据时insert into useryhm (id,name) values ('111','qq1') 时,为什么表useryhm里没有这个记录呢?同时在VB里select * from useryhm时也没有记录!!! 我换成其它非临时表时,能插入能查询数据,
但是我用命令直接在SQL/pl里运行,也能插入能查询,为什么呢?把表名换成大写的也不行,我晕了

解决方案 »

  1.   

    会话级临时表采用on commit preserve rows;而事务级则采用on commit delete rows;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是commit、rollback或者是会话结束,临时表中的数据都将被截断
      

  2.   

    参考:
    http://school.itzcn.com/special-spid-35.html
    上面讲解的比较详细,
    希望对楼主有所帮助。
      

  3.   

    楼上讲的很清晰了,把ON  COMMIT  PRESERVE  ROWS去掉
      

  4.   

    oracle临时表的数据是保存在临时表空间的,临时表空间的数据会根据你建表时候的命令不同而出现不同的效果。on commit delete rows:提交删除数据,这个表里面的数据当出现commit动作的时候自动删除
    on commit reserve rows:提交保存数据,这个表里面的数据当出现commit动作的时候自动保存,当退出本session的时候(直观点说就是退出sqlplus 或者 plsql)但是要注意,上面两个说法都是指的一个session,无论你设置那种方法,在另外的session中数据都是不可见的。
      如:开了一个a窗口,向临时表里面插入数据,这个时候除了a窗口之外的所有窗口都不会看到临时表里的数据无论你采用什么方式建临时表。说的有点凌乱,你自己和你自己的情况对下号,应该就能找到问题的所在。