初来咋到需要建立一个存储过程,用到临时表。
将数据库中的一个表如table1数据放入临时表temp1中,然后对temp1进行一些查询分析,最后返回temp1的结果集。不知道怎么写,以前写过SqlServer的存储过程,oracle感觉有很大不同,各位帮帮忙,给个例子。

解决方案 »

  1.   

    创建临时表:
    CREATE GLOBAL TEMPORARY TABLE TABLENAME (
       COL1  VARCHAR2(10),
       COL2  NUMBER
    ) ON COMMIT PRESERVE ROWS ;然后就可以象正常表一样使用了,preserve关键词指定的临时表的数据只对当前会话可见,不需要考虑加锁的问题,在会话断开时才会清空。另外ORACLE的表是永久存在的,只有里面的数据是临时的。
      

  2.   

    --临时表语法
    --会话型的,会话结束数据清空
    create global temporary table test_tmp(id number,name varchar2(10).....) 
    on commit preserve rows--事务型的,事务结束数据清空
    create global temporary table test_tmp(id number,name varchar2(10)......) 
    on commit delete rows--过程
    create or replace procedure p_rec(cur out sys_refcursor)
    as
    begin
    insert into 临时表  select * from tb;
    commit;
    open cur for select * from 临时表 where ....;
    end;
    --调用
    var cur refcursor
    exec p_rec(:cur);
    print cur
    或者declare
    cur sys_refcursor;
    变量...;
    begin
    fetch cur into 变量;
    while cur%found loop
    dbms_output.put_line(变量);
    fetch cur into 变量;
    end loop;
    close cur;
    end;