Sure_xt
Sure_xt
采纳率0%
2016-10-10 05:20 阅读 3.9k

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条回答 默认 最新

相关推荐