游标的结果集放入临时表


这个存储过程是在sqlserver环境下的,通过游标读取数据,得到结果放入临时表中

注:如果知道如何将游标通过循环读出,妹子也是刚刚接触存储过程的,还望赐教。

/****

将游标遍历的结果集放入临时表中,最后读取临时表
****/


CREATE  PROCEDURE [dbo].[cc]
AS

DECLARE @id VARCHAR(10)

/***声明游标***/

DECLARE cc CURSOR FOR SELECT id FROM type

/**创建临时表***/

 CREATE TABLE #lo
(
  id INT,
  age INT,
  name VARCHAR(20),
  type_id INT

)

/**打开游标***/

OPEN cc

/**执行游标 获取数据***/

FETCH NEXT FROM cc INTO @id
WHILE(@@FETCH_STATUS=0)
BEGIN
   /** 将查询的结果放入临时表中**/
  INSERT INTO #lo SELECT * FROM event
  FETCH NEXT FROM cc INTO @id

END

/**查询临时表的内容***/

SELECT * FROM #lo

/**关闭游标***/

CLOSE cc

/**释放游标***/

DEALLOCATE cc

发布了31 篇原创文章 · 获赞 12 · 访问量 11万+
展开阅读全文

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

10-10

## --包头 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; 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览