CREATE OR REPLACE procedure ×××
(......
......)
is 
begin
select ......
.....;
create table **
(
  a varchar2 not null,
......
);
end ×××;
这种方式建立临时表可以吗?

解决方案 »

  1.   

    第一步:对临时表表名表达不同系统有不同表示方法;
    第二步:可以用 select * into #q from ABC 命令,其中#q是临时表名
      

  2.   

    oracle不支持 select into的
      

  3.   

    function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet;
      var 
          TempTable:TClientDataSet;
      begin
       TempTable:=nil;
       Result:=nil;
       if AFieldDefs<>nil then
       begin
         try
           TempTable:=TClientDataSet.Create(Application);
           TempTable.FieldDefs.Assign(AFieldDefs);
           TempTable.CreateDataSet;
           Result:=(TempTable as TDataSet);
         Except
           if TempTable<>nil then 
                         TempTable.Free;        Result:=nil;
           raise;
         end
        end
     end;  在程序中按如下方法使用:
      procedure TForm1.Button1Click(Sender: TObject);
      var 
          ADataSet:TDataSet;
      begin
       ADataSet:=TDataSet.Create(Self);
       with ADataSet.FieldDefs do
       begin
          Add(′Name′,ftString,30,False);
          Add(′Value′,ftInteger,0,False);
       end;   with DataSource1 do
       begin
          DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
          DataSet.Open;
       end;   ADataSet.Free;
      end;
      

  4.   

    oracle可以用create table .... as select ....的方式建表,但这不是oracle的临时表。
    要创建oracle真正意义的临时表,需加上temporary关键字 ,如:
    create global temporary table testtable(a varchar2(20))  on commit preserve rows;

    create global temporary table testtable(a varchar2(20))  on commit delete rows;
    如果用delete,那么事务提交后临时表的数据就会删除,如果是preserve,那么是在session结束时数据被删除。
    但是oracle的临时表与informix等系统的临时表有很大的区别,oracle的临时表是对所有session都可见的,只是数据对于各个session来说是独立的。可以在存储过程中使用
    execute immediate '建表语句';
    来创建临时表。
      

  5.   

    if exists(select name from sysobjects where name='#表名' and type='u')
      drop table #表名
    create table #表名(字段)这样便可创建一个临时表
    drop table #表名
    以上语句即可
      

  6.   

    如果用临时表的话要加 create temporary table关键字。还是用Cursor来存储记录集吧
      

  7.   

    偶一直用oracle
    oracle的存储过程不支持临时表,只能改换思路或者用实际的表代替临时表工作(需要在每次使用该表前将它清空)