Sure_xt 2016-10-10 05:20 采纳率: 0%
浏览 4080

oracle 中如何将游标中循环查出的结果集放到另外一个临时表中

--包头

CREATE OR REPLACE PACKAGE TESTPACKAGE IS

TYPE MYCURSOR IS REF CURSOR; -- 定义游标变量

 -- 定义过程,用游标变量作为返回参数
 PROCEDURE GETRECORDS(
                       RET_CURSOR OUT MYCURSOR ,    
                       P_BIZTYPE  VARCHAR2:=NULL,-- 业务类型
                       P_DATE_START  VARCHAR2:=NULL,-- 起始时间
                       P_DATE_END  VARCHAR2:=NULL, -- 结束时间
                       P_CUSTOM_CODE VARCHAR2:=NULL--关区代码 
                      ); 

END TESTPACKAGE;

--包体

CREATE OR REPLACE PACKAGE BODY TESTPACKAGE IS

/*过程体*/

PROCEDURE GETRECORDS(
RET_CURSOR OUT MYCURSOR , --返回值

P_BIZTYPE VARCHAR2:=NULL,-- 业务类型
P_DATE_START VARCHAR2:=NULL,-- 起始时间
P_DATE_END VARCHAR2:=NULL, -- 结束时间
P_CUSTOM_CODE VARCHAR2:=NULL--关区代码
) AS

--ROW_DEPT CUR_CONNECTNO%ROWTYPE;
--V_SQL VARCHAR2(3000);--sql语句
DAN VARCHAR2(2000);

BEGIN

--CUR_CONNECTNO 该游标用于存放每个业务查询出的结果集     
--A业务
IF P_BIZTYPE='A' THEN

  CURSOR CUR_CONNECTNO IS 
  SELECT  A.ID AS GJ_NO
  FROM GJ_A  A
  WHERE TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END;

END IF;

--点击查询全部业务类型时,连接

/* IF P_BIZTYPE='' THEN
V_SQL+=' UNION ALL '
END IF;*/

--B业务
IF P_BIZTYPE='B' THEN

  CURSOR CUR_CONNECTNO IS 
  SELECT  A.NO  AS GJ_NO
  FROM GJ_B A
  WHERE  A.I_E_MARK='1'
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END;
END IF;

--M业务
IF P_BIZTYPE='M' THEN

  CURSOR CUR_CONNECTNO IS 
  SELECT A.NO AS GJ_NO
  FROM GJ_M A
  WHERE  SUBSTR(A.NO,3,1)='M'
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END;
END IF;



/*IF  P_BIZTYPE='' THEN
  V_STR+=' UNION ALL '
  END IF;*/

--G
IF P_BIZTYPE='G' THEN

  CURSOR CUR_CONNECTNO IS
  SELECT A.NO  AS GJ_NO
  FROM GJ_G A
  WHERE  TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END;

END IF;

/*IF  P_BIZTYPE='' THEN
  V_STR+=' UNION ALL '
  END IF;*/

--E 业务
IF P_BIZTYPE='E' ||  P_BIZTYPE='' THEN

  CURSOR CUR_CONNECTNO IS
  SELECT A.NO AS GJ_NO 
  FROM GJ_E  A 
  WHERE A.MARK='2'
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_START
  AND TO_CHAR(A.GDATETIME,'YYYY/MM/DD') >=P_DATE_END;

END IF;

-- 创建临时表
/* CREATE GLOBAL TEMPORARY TABLE TEMP_TBL(gj_no VARCHAR2(30),COL_A VARCHAR2(30),COL_A VARCHAR2(30))

ON COMMIT DELETE ROWS ;*/

FOR HAHA IN CUR_CONNECTNO LOOP

   --根据上述业务查出的数据 再在次记录表中是否 存在 ,若存在就把数据 取出来
         -- 取出来 想保存到临时表中。  该怎么写
  SELECT *
  FROM RD_Z   Z
  WHERE  BIZ_TYPE = P_BIZTYPE
  AND Z.NO=HAHA.GJ_NO ;

END LOOP;

--最后想用该游标来存放临时表中的数据集 来返回去
--OPEN RET_CURSOR FOR

END GETRECORDS;

END TESTPACKAGE;

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2016-11-04 20:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器