有几个SQL :
select F001,F002 from T_001
select F001,F002,F003 from T_001
如何根据这些SQL动态建立写到临时表里。
再说一些,以下两种方法是能建临时表,但要先指定列名。我想要的是不先指定列表如何建立临时表呢?
CREATE GLOBAL TEMPORARY TABLE TABLE_NAME (字段名列表) 
AS 
SELECT * FROM TABLE 
ON COMMIT DELETE ROWS;CREATE GLOBAL TEMPORARY TABLE TABLE_NAME (字段名列表) 
AS 
SELECT * FROM TABLE 
ON COMMIT PRESERVE ROWS;

解决方案 »

  1.   

    除非你的临时表放到存储过程里,然后execute动态sql语句;还有一种办法象你上面的先用所有字段生成临时表,某些字段虽然多在临时表里,但为了方便可以不使用
      

  2.   

    构建动态的临时表是件很困难的事,况且你字段多的话就要构建很多的临时表,
    我个人的建议是只构建动态的sql语句,然后用游标返回结果集。
      

  3.   

    给你一个动态构建的例子,希望对你有帮助:
    有一个表 有两个列: 
    datetime  num 
    200801    8 
    200802    4 
    200803    3 
    200804    6 
    200805    3 
    200806    2 
    200807    7 
    200808    8 
    200809    2 
    200810    1 
    200811    0 
    ..... 有n行, 
    现在要求转换为 
    有n列,一行, 
    就是 
    datetime1  datetime2  datetime3  datetime4  datetime5  datetime6  ....  
    200801    200802    200803    200803    200803    200803    .... 
    请求一个存储过程 
    -------------
    drop table A
    create table A
    (
    datetime varchar(20),
    num  varchar(10)
    )
    insert into A values('200801',8);
    insert into A values('200802',4);
    insert into A values('200803',3);
    select substr(sum(decode(datetime,'200801',datetime))  as datetime1 ,
           sum(decode(datetime,'200802',datetime))  as datetime2 ,   
     from Aselect * from Adeclare
    v_datetime varchar(20);
    v_i int:=0;
    v_s varchar(1000);
    v_sql varchar(2000);
    cursor c
    is
    select datetime from A;
    begin
    v_s := 'select ';
    open c;
    loop
    fetch c into v_datetime;
    if c%found then
    v_i :=v_i+1;
    v_s := v_s||'sum(decode(datetime,'||v_datetime||',datetime))  as datetime'||v_i||',' ;
    else
    exit;
    end if;
    end loop;
    v_s := SUBSTR(v_s, 0, LENGTH(v_s) - 1);--去掉最后一个逗号
    v_sql :=   v_s||' from A';
    dbms_output.put_line('v_sql='||v_sql);end;
      

  4.   

    不管什么方法,至少象SQL Server 中 select * into #Temp from TableName
    这种功能Oracle如何做到?
      

  5.   

    CREATE TABLE TABLE2 AS SELECT * FROM TABLE1;
    CREATE OR REPLACE VIEW V_TEST AS SELECT * FROM TABLE1;
      

  6.   

    yf520gn有考虑过两个人同时向一个表写数据,而数据结构又不一样的情况吗?
      

  7.   


    create global temporary table tp_table_01
    on commit [preserve/delete] rows
    as
    select * from table_01;很好用啊!
      

  8.   

    看样子我来说下SQL Server #号表的作用,不然是真的找不到办法了?
    SQL Server 中,#tmp这个表,对于每个连接过来的链接都是唯一可见的。也就是说,
    当sa在1号客户端连接时,他建了一个#tmp,结构有两列,c1,c2
    当sa同时在2号客户端连接时,他也建了一个#tmp ,结构有三列,c1,c2,c3
    主要特性如下:
    1、两人的表数所不一样,而且最重要的是,结构也不一样。
    2、当连接断开时,#tmp消失。
    3、当连接不断开时,也就是在多页面请求数据库时,同样可以查询此#号表。
    Oracle中有没有办法实现此功能?