写了一个测试存储过程 
调用另外一个存储过程 取其返回的游标数据集插入声明的变量
该测试是在一个SQL窗口中执行的 每执行一次 结果都多一倍出来
而我想要的结果却是每次执行在DBMS输出窗口看到一样的结果!难道会话一样 临时表的结果就越来越多?怎么和MSSQL不一样啊?
测试存储过程:
create or replace procedure P_TEST
(
    ParamA in out varchar2

is
m_1 varchar2(2000);
IDLIST temp_idlist%rowtype;
DT1 SYS_REFCURSOR;
begin
    m_1 := '121,122,124';
    
    p_global_columnlist(m_1, DT1);  
     
     loop 
        fetch DT1 into IDLIST;
        exit when DT1%notfound;       
        DBMS_OUTPUT.put_line('列:' || IDLIST.COLUMN_NAME);     
     end loop;
    
     close DT1;end P_TEST;

解决方案 »

  1.   

    p_global_columnlist是每次会往temp_idlist中插入数据,然后返回temp_idlist的记录数吗?oracle的临时表不会像sql server那样自动清空的。
      

  2.   

    p_global_columnlist 就是将一个select结果集给游标DT1 我上面的那个每次插3条记录那要怎么处理一下能够实现SQL SERVER的效果呢?临时表的某个会话能自己先删除记录吗?
      

  3.   

    采用oracle自治事务看看。
      

  4.   

    你的临时表怎么创建的
    create global temporary table tmp_transaction
    on commit delete rows;创建一个基于事务的表,别基于会话
      

  5.   

    ON COMMIT PRESERVE ROWS
    ON COMMIT DELETE ROWS
    两种方式都试过了 效果一样 不行