用delphi 6 使用BDE连接oralce8i,在程序中建临时表,示例如下:
  with Query1 do
      begin
      Query1.Active:=false;
      Query1.Sql.Clear;
      Query1.Sql.Add('CREATE GLOBAL TEMPORARY table b( 编号 char(40),名称 char (40)) ')
      Query1.Sql.Add('ON COMMIT DELETE ROWS');
      Query1.ExecSQL;
      Query1.Sql.Clear;
      Query1.Sql.Add('insert into b(名称,编号) values(''1001'',''数据'')');
      Query1.ExecSQL;
      Query1.SQL.clear;
      Query1.Sql.Add('select * from b');
      Query1.open;
      Query1.active:=true;
      end;
表能建起来,但数据就是插不进去,不知哪里出错,但同样的语句在oracle中的SQLPLUS中就有用,在程序中使用drop table 临时表,也同样不起作用,请过来人帮忙看看,谢谢!

解决方案 »

  1.   

    使用insert into b(编号,名称) select id,name from A,也不行,在表中就是没数据,在sqlplus中就行。
      

  2.   

    解决了,应该是ON COMMIT PRESERVE ROWS
      

  3.   

    又有问题,删除临时表时出错:ORA-14452: 试图创建、更改或删除正在使用的临时表中的索引
      

  4.   

    commit了吗?
    放在一个事务中试一下
      

  5.   

    我不支持你这种临时表的建法,我喜欢用DateSet直接来建立监时表。
    例:
    用Table件
    在FieldDefs里设置好各字段的名字和类型(也可以在程序中设置)
    在程序中用Table1.CreateTable
    就可以用监时表了。
      

  6.   

    在ADO里建立这样的监时表更是用得多。