就如同建立固定表一樣:
vSql:='create ...';
execute immediate vSql;

解决方案 »

  1.   

    [Q]怎样创建临时表 
    [A]8i以上版本 
    create global temporary tablename(column list) 
    on commit preserve rows; --提交保留数据 会话临时表 
    on commit delete rows; --提交删除数据 事务临时表 
    临时表是相对于会话的,别的会话看不到该会话的数据。 
      

  2.   

    在Oracle8i中,可以创建以下两种临时表: 
    1。会话特有的临时表 
    CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
    ON COMMIT PRESERVE ROWS; 2。事务特有的临时表 
    CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification> ) 
    ON COMMIT DELETE ROWS; 
    CREATE GLOBAL TEMPORARY TABLE MyTempTable 
    所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。
    下面两句话再贴一下: 
    --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行) 
    --ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。转自包子
      

  3.   

    CREATE OR REPLACE PROCEDURE PR_PDD_SC
    AS
    LS_DATE  varchar(20);
    ln_count numeric(9);
    str varchar2(100);
    BEGIN
    --DROP TABLE #PDYDY;  在会话中删除临时表会出错
     begin
     str:='CREATE GLOBAL TEMPORARY PDYDY
      (F_PDRQ    char(8)        not null,  F_BMNM    number  not null) ON COMMIT PRESERVE ROWS'; 
     execute immediate str;
     exception
     when others then
     null;
     end;
    select count(*) INTO ln_count from HSPDYDY where F_PDRQ=LS_DATE;
    if ln_count=0 then
    return;
    end if;
    insert into  PDYDY(F_PDRQ,F_BMNM)
    select F_PDRQ,F_BMNM
    from HSPDYDY
    where F_PDRQ=LS_DATE;
    delete from hspdd a where exists(select 1 from PDYDY b where a.f_bmnm=b.f_bmnm);
    begin
    Insert into HSPDD(F_PDRQ,F_SFJZ,F_BMNM,F_CFBM,F_SPNM,F_PDSL,F_ZMSL,F_PDDJ,F_LSDJ)
    select LS_DATE,'1',t1.F_BMNM,t1.F_BMNM,t1.F_SPNM,0,t1.F_JCSL,t1.F_PJJJ,0
    from HSSPRJZJC t1,PDYDY t2
    where t1.F_BMNM=t2.F_BMNM and t1.F_JCSL<>0 and t1.F_RQ=LS_DATE;
    exception
    when others then
    ROLLBACK;
    return;
    end;
    update HSPDD set F_LSDJ=DASPZD.F_LSDJ
    from DASPZD
    where HSPDD.F_SPNM=DASPZD.F_SPNM;

    COMMIT;
    END;
    /