-
Oracle存储过程中cursor + with用法
2019-09-18 10:01:47CREATE or replace PROCEDURE XXXXX ( C1 OUT SYS_REFCURSOR) AS BEGIN open C1 FOR WITH PRJ_REL AS( select 。。。 ), dpt_info as ( select 。。。 ) SELECT 。。。 END; ...CREATE or replace PROCEDURE XXXXX ( C1 OUT SYS_REFCURSOR) AS BEGIN open C1 FOR WITH PRJ_REL AS( select 。。。 ), dpt_info as ( select 。。。 ) SELECT 。。。 END;
-
SQL Server学习:存储过程中Cursor(游标)的使用
2012-04-17 17:14:50SQL Server中的游标声名后,一定要显示的释放。若未释放,再次执行时,...在存储过程中试用Cursor的示例: IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN DROP PROCEDURE my_sSQL Server中的游标声名后,一定要显示的释放。若未释放,再次执行时,则会出现“游标XX已经存在”的异常。Open游标后,一定要显示的Close。
在存储过程中试用Cursor的示例:
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN DROP PROCEDURE my_sp_test; END; GO create procedure my_sp_test @i int, @outstr varchar(100) out as declare @loginName varchar(100); declare cur_user cursor for select ESUS_LOGIN_NAME from ES_USER where ESUS_ESCO_ID='100004'; begin try open cur_user; -- 开启游标 fetch next from cur_user into @loginName; while @@FETCH_STATUS = 0 begin if(@i >=10) begin set @outstr = 'login name: '+@loginName; RAISERROR (66666, -- Message id. 16, -- Severity, 1 -- State, ) ; end else if (@i<10) begin set @outstr = 'login name: '+@loginName; end; fetch next from cur_user into @loginName; end; close cur_user; -- 关闭游标 return; end try begin catch if @@ERROR = 66666 begin close cur_user; -- 关闭游标 deallocate cur_user;-- 释放游标 end; return; end catch; go
测试存储过程,如下代码:
相关资源下载地址: http://download.csdn.net/detail/chen_yu_ting/4233615/* 第一个入参= 12,不会产生异常 */ DECLARE @OUTSTR_test VARCHAR(100); exec dbo.my_sp_test 12,@OUTSTR_test out print @OUTSTR_test ; -- @OUTSTR_test = 'login name: ryan' /* 第一个入参= 8,执行第二次后则会出现下行的异常 * '名为'cur_user' 的游标已存在。' */ DECLARE @OUTSTR_test_1 VARCHAR(100); exec dbo.my_sp_test 8,@OUTSTR_test_1 out print @OUTSTR_test_1 ; -- @OUTSTR_test_1 = 'login name: vicky' /* 入参为8的测试语句执行第二次,之所以会出现异常,是因为没有将游标释放就return了。所以有使用游标的存储过程,在return之前一定要显示的释放游标。 */
-
mysql存储过程 cursor_Mysql存储过程中使用cursor
2021-01-19 01:23:24-- 定义游标 DECLARE stuCursor CURSOR FOR SELECT stuNum,stuName,birthday FROM t_Student; -- 定义结束标记 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; -- 打开游标 OPEN stuCursor; -- 循环 ...一、表
学生表
CREATE TABLE `t_student` (
`stuNum` int(11) NOT NULL auto_increment,
`stuName` varchar(20) default NULL,
`birthday` date default NULL,
PRIMARY KEY (`stuNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
学生分数表
CREATE TABLE `t_stu_score` (
`id` int(11) NOT NULL auto_increment,
`stuNum` int(11) default NULL,
`score` decimal(6,2) default NULL,
PRIMARY KEY (`id`),
KEY `FK_t_stu_score` (`stuNum`),
CONSTRAINT `FK_t_stu_score` FOREIGN KEY (`stuNum`) REFERENCES `t_student` (`stuNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
学生详细表
CREATE TABLE `t_stu_detail` (
`id` int(11) NOT NULL auto_increment,
`stuName` varchar(20) default NULL,
`score` decimal(6,2) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
将t_Student和t_stu_score表中满足一定条件的数据插入到t_stu_detail中。
二、过程
DELIMITER &&
CREATE PROCEDURE proc_AddStuDetail( IN p_score DECIMAL(6,2) )
BEGIN
DECLARE vstuNum INT;
DECLARE vstuName VARCHAR(20);
DECLARE vbirthday DATE;
DECLARE vscore DECIMAL(6,2);
DECLARE done INT;
-- 定义游标
DECLARE stuCursor CURSOR
FOR
SELECT stuNum,stuName,birthday FROM t_Student;
-- 定义结束标记
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 打开游标
OPEN stuCursor;
-- 循环
stuLoop:LOOP
-- 取游标中的数据
FETCH stuCursor INTO vstuNum,vstuName,vbirthday;
IF done = 1 THEN
LEAVE stuLoop;
END IF;
IF DATE(vbirthday) >= '1990-03-01' THEN
SELECT score INTO vscore FROM t_stu_score WHERE stuNum = vstuNum;
IF vscore >= p_score THEN
INSERT INTO t_stu_detail VALUES(NULL,vstuNum,vscore);
END IF;
END IF;
END LOOP stuLoop;
-- 关闭游标
CLOSE stuCursor;
END
&&
DELIMITER ;
三、调用过程
CALL proc_AddStuDetail(86);
-
Mysql存储过程中使用cursor
2019-04-14 11:10:47Mysql存储过程中使用cursor首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程
一、表
学生表
CREATE TABLE `t_student` (
`stuNum` int(11) NOT NULL auto_increment,
`stuName` varchar(20) default NULL,
`birthday` date default NULL,
PRIMARY KEY (`stuNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
学生分数表
CREATE TABLE `t_stu_score` (
`id` int(11) NOT NULL auto_increment,
`stuNum` int(11) default NULL,
`score` decimal(6,2) default NULL,
PRIMARY KEY (`id`),
KEY `FK_t_stu_score` (`stuNum`),
CONSTRAINT `FK_t_stu_score` FOREIGN KEY (`stuNum`) REFERENCES `t_student` (`stuNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
学生详细表
CREATE TABLE `t_stu_detail` (
`id` int(11) NOT NULL auto_increment,
`stuName` varchar(20) default NULL,
`score` decimal(6,2) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
将t_Student和t_stu_score表中满足一定条件的数据插入到t_stu_detail中。
二、过程
DELIMITER &&
CREATE PROCEDURE proc_AddStuDetail( IN p_score DECIMAL(6,2) )
BEGIN
DECLARE vstuNum INT;
DECLARE vstuName VARCHAR(20);
DECLARE vbirthday DATE;
DECLARE vscore DECIMAL(6,2);
DECLARE done INT;
-- 定义游标
DECLARE stuCursor CURSOR
FOR
SELECT stuNum,stuName,birthday FROM t_Student;
-- 定义结束标记
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 打开游标
OPEN stuCursor;
-- 循环
stuLoop:LOOP
-- 取游标中的数据
FETCH stuCursor INTO vstuNum,vstuName,vbirthday;
IF done = 1 THEN
LEAVE stuLoop;
END IF;
IF DATE(vbirthday) >= '1990-03-01' THEN
SELECT score INTO vscore FROM t_stu_score WHERE stuNum = vstuNum;
IF vscore >= p_score THEN
INSERT INTO t_stu_detail VALUES(NULL,vstuNum,vscore);
END IF;
END IF;
END LOOP stuLoop;
-- 关闭游标
CLOSE stuCursor;
END
&&
DELIMITER ;
三、调用过程
CALL proc_AddStuDetail(86); -
mysql存储函数 cursor_MySQL Cursor在存储过程中的使用
2021-01-19 10:26:15MySQL Cursor在存储过程中的使用游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。declares a cursor and associates it with a SELECT statement that retrieves the rows to be ... -
存储过程中使用cursor
2007-01-16 09:38:45在sqlserver的存储过程中使用cursor对象的例子[@more@]create proc p_test @cu1 cursor varying output, @cu2 curso... -
存储过程中的游标cursor
2019-10-05 04:01:55存储过程里的游标,其实就是结果集,然后想操作结果集中的数据,一行行读取游标即可 首先要声明一个游标 delimiter $$CREATE procedure changeName()begin declare stopflag int default 0; declare myname ... -
DB2存储过程中LOAD CURSOR 使用
2018-04-25 15:28:17记录下个人的经历: 1、目的: 需要通过创建一个存储过程,对一个数据量较大的表(千万级)进行数据统计,将统计之后的数据放入到另外一张 临时表中,待其它操作处理。 2、实现思路:思路其实很简单,在sql ... -
递归存储过程中使用cursor
2006-12-15 17:59:42递归存储过程中使用cursor可以用来向上遍历有向图,找出其直系父辈。注意定义成local类型的cursor ![@more@]PROCEDURE sp_get_all_lineal_parent @node_id int, @... -
Oralce中返回结果集的存储过程ref cursor
2012-12-19 22:15:17有返回值的存储过程(列表 结果集) 案例:编写一个过程,输入部门编号,返回该部门所有员工的信息。 对该题的分析如下: 由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也... -
Oracle存储过程中使用cursor
2009-04-29 16:45:00CREATE OR REPLACE PROCEDURE GLU_SP_RECALCULATE_RATE (P OUT VARCHAR2)AS rateRow REV_SHARE_RATE%rowtype; cursor rateRows is SELECT DISTRIBUTOR_ID, RETAILER_ID, RATE, M... -
MYSQL存储过程循环CURSOR(游标)使用
2017-11-06 17:57:23游标概述 概括来说,游标是一种临时的数据库对象,即用来存放一个表中所有信息或者表中的一...如果处理过程需要重复频繁的应用一个结果集,创建游标比不断查询数据库快捷的多。 注意游标建立的一些规范 1、变量建立在游 -
ibatis配置oracle存储过程返回cursor类型
2009-11-09 17:12:00今天在开发中,需要用到存储过程返回多条记录,用到了cursor.于早上网查找有关ibatis配置cursor的文章,大多数的文章代码只提到了关键部分,于是拿来安到自己的项目上,花了一下午的时间来调试,总是报错总结了以下... -
mysql存储过程中两个CURSOR嵌套使用
2013-06-25 16:22:04昨天遇到一个mysql开发的问题,从网上发现一篇文章,...mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有 -
Oracle 存储过程中使用cursor 游标遍历数据
2009-11-24 10:15:00先定义一个cursor: Procedure P_MYPROC ( PI_PARAM VARCHAR2 )IS VI_A VARCHAR2(10):=''; VI_BVARCHAR2(20):=''; VI_C VARCHAR2(30):=''; --定义 CURSORMYCUR IS SELECE T.A ,T.B, T.C FROM TBL_... -
SqlServer存储过程中使用Cursor(游标)操作记录
2012-07-25 09:38:001. 为何使用游标: 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在... -
oracle 存储过程及REF CURSOR的使用
2016-10-18 10:40:14摘要:主要记录了oracle的stored procedure...存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行 -
mysql存储过程中两个CURSOR嵌套使用遇到的有关问题
2014-03-27 17:39:57mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有一个userid item表 字段只有一个itemid ...
-
Flutter 使用FocusNode 报node.ancestors.contains(this)
-
微软完成SolarWinds调查工作:该事件没有导致黑客广泛获取用户数据
-
tp5微信小程序封装类库
-
深究字符编码的奥秘,与乱码说再见
-
uniapp怎么发起请求
-
响应式编程入门与实战(Reactor、WebFlux、R2DBC)
-
ADC 加法(x86)
-
几款串口助手.zip
-
linux红帽
-
MySQL 管理利器 mysql-utilities
-
增强用户体验让网站和APP更具动感的几点建议
-
登陆功能测试用例.xlsx
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
springboot使用@WebListener动态传参问题
-
chamados:西马德斯(Sistema para gerenciamento de chamados)-源码
-
kotlin协程类继承关系(PlantUML)
-
基于双壁碳纳米管低阈值1895nm锁模激光器
-
Python启蒙到架构师的核心技术精讲课程
-
flutter 动态TabBar 用singleTickerProviderStateMixin报错
-
持续集成与单元测试xmzy.pdf