日期:2014-05-16  浏览次数:20820 次

oracle 临时表问题
如题:

直接上代码

  function fun_sys_getparmrole(userid varchar2) return cur_type is
    cur_type_tp cur_type;
    counts      number:=-1;
    ls_userid   varchar2(50);
    lp_str      varchar2(100);
    lc_str      varchar2(500);
    ls_temp1    varchar2(2000);
    ls_temp2    varchar2(2000);
    ls_temp3    varchar2(2000);
    begin  
       lp_str:='drop table self_temp_back';
       execute immediate lp_str;
       lc_str:='create global temporary table self_temp_back(fconfigid varchar2(50), fparname varchar2(500), fparvalue varchar2(500)) on commit preserve rows'; 
       execute immediate lc_str;  




然后 一系列操作 插入数据

       open cur_type_tp for select fconfigid, fparname, fparvalue from self_temp_back;
       return(cur_type_tp);
    end fun_sys_getparmrole;



ps:第一次执行没有问题

在存储过程里面测试也没有问题

我写的是个包 这里用的函数 当然也替换为存储过程写法测试了 

但是点最上面那个执行的时候就报错了

*第 1 行出现错误: 

  ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引



===============

网上已经搜索 还是没有解决

在java 里 用jdbc调用 的写法  传参 和 cursor 这些都没问题


此外,表已经赋予 用户操作的任何权限  插入数据一已经成功  执行也没问题


就是删除时,提示 好像是 锁表了 

truncate也试过了

------------------





我就是想在java里得到一个 结果集 

通过存储过程实现  ,当然是有条件的,不同条件 返回不一样。

(已经通过本地表实现了需求)

之前用临时表做的,想突破这个问题 

此外 语句全是动态执行的 因为跨库的 


---------------------


期待大牛出现。



------解决方案--------------------
不知道你下面这样做的意义在哪里
lp_str:='drop table self_temp_back';
       execute immediate lp_str;
       lc_str:='create global temporary table self_temp_back(fconfigid varchar2(50), fparname varchar2(500),&nbs