我用oracle写了一个存储过程是返回临时表数据的,代码如下
create or replace procedure sp_getResult(rst out sys_refcursor) is
str varchar2(50);
tempisexist integer;
begin
---判断是否创建临时表 (这个表可以先创建不需要写在存储过程里)
select count(*) into tempisexist from all_tables where table_name='TMP'; 
if tempisexist=0 then
execute immediate 'create global temporary table TMP(id number,nameyzl varchar2(10)) on commit delete rows';
execute immediate 'ALTER TABLE TMP ADD CONSTRAINT PK_id PRIMARY KEY (id)';  --设置表主键
end if;
---判断是否创建临时表
commit; 
execute immediate 'insert into TMP (id,nameyzl) select id,test from test1';str:='select * from tmp';
open rst for str;
end sp_getResult;
我用delphi 的ADOQuery1来进行连接和运行但在没关联DataSource1和DBGridEh1的时候运行时正常,但如果关联上DataSource1和DBGridEh1就会报错 ORA-08103:object no longer exists这是为何,小弟在线等待急....

解决方案 »

  1.   

    to kye_jufei
    为什么会这样呢?我在PL/SQL里执行时正常的呀!难道要返回临时表的存储过程在delphi里都不能用吗?
      

  2.   

    返回临时表数据直接select 就行了嘛,干嘛还要弄个参数传出来呢,
      

  3.   

    str:='select * from tmp';
    open rst for str;我现在就是返回临时表的所有行呀,那有什么参数呀
      

  4.   

    str:='select * from tmp';
    open rst for str;我现在就是返回临时表的所有行呀,那有什么参数呀