首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

关于oracle 临时表与游标的有关问题?

2012-12-19 
关于oracle 临时表与游标的问题??我在oracle 92的存储过程中 ,通过下面的方式,创建一个临时表,并向表中添

关于oracle 临时表与游标的问题??
我在oracle 92的存储过程中 ,通过下面的方式,创建一个临时表,并向表中添加了数据,我在创建这个临时表中通过语句对此临时表进行检查,如果表存在直接插入数据,否则创建这个临时表,
str:='CREATE GLOBAL TEMPORARY TABLE temptest ( 
     RQ date not null, 
     ZS VARCHAR2(100)) 
     ON COMMIT DELETE ROWS';
     execute immediate str;

在同一个存储过程中,我还定义了一个游标,来查询这个临时表中的数据,但当临时表尚未创建或删除,下面的代码将出错,找不到这个临时表

DECLARE 
      CURSOR L_RECORD IS SELECT * FROM temptest;--此处哪果临时表不存在出错
                 da L_RECORD%ROWTYPE;
     BEGIN
       FOR da IN L_RECORD LOOP
          SELECT COUNT(*) INTO countzjs FROM A010 A INNER JOIN EX_JQZDAFB JQZ ON A.JQZDM=JQZ.JQZDM
          WHERE JQZ.QKDM=p_QKDM AND tcrq<=da.rq;
       END LOOP;
    END;

请问能否将临时表的名称 通过一个变量进行解决。

后来我通过
TYPE ResultData IS REF CURSOR;
  L_RECORD ResultData;
定义游标,

  strTemp:='SELECT * FROM temptest';
          OPEN L_RECORD for strTemp;
     BEGIN
       LOOP
         FETCH L_RECORD INTO rq;---------此处不知怎么写,没有值,
                 EXIT WHEN L_RECORD%NOTFOUND; 
                   DBMS_OUTPUT.put_line(rq);
              END LOOP;
       close L_RECORD;
    END;
如果按上面的方式可以解决问题,但不知怎么通过Fetch 循环取出 rq这个值,
[最优解释]


SQL> create or replace procedure p_t
  2  is
  3  str varchar2(4000):='CREATE GLOBAL TEMPORARY TABLE temptest (
  4    RQ date not null,
  5    ZS VARCHAR2(100))
  6    ON COMMIT DELETE ROWS';
  7  strTemp varchar2(1000) :='SELECT * FROM temptest';
  8  TYPE ResultData IS REF CURSOR;
  9  L_RECORD ResultData;
 10  type t_r is record(RQ date,ZS VARCHAR2(100));
 11  v_t t_r;
 12  v_c integer:=0;
 13  begin
 14  execute immediate 'select count(*) from user_tables where table_name=upper(:v)'
 15  into v_c using 'temptest';
 16  if v_c=0 then
 17  execute immediate str;
 18  end if;
 19  execute immediate 'insert into temptest select hiredate,empno from emp';


 20  open L_RECORD for strTemp;
 21  loop
 22  fetch L_RECORD into v_t;
 23  exit when L_RECORD%notfound;
 24  dbms_output.put_line('empno:'

热点排行