精华内容
下载资源
问答
  • 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; ...
    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的示例: IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN DROP PROCEDURE my_s

       SQL 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

    测试存储过程,如下代码:

    /* 第一个入参= 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之前一定要显示的释放游标。
     */

    相关资源下载地址: http://download.csdn.net/detail/chen_yu_ting/4233615
    展开全文
  • -- 定义游标 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

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

                    一、表
    学生表
    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存储过程中的使用游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作。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...
  • 存储过程里的游标,其实就是结果集,然后想操作结果集中的数据,一行行读取游标即可 首先要声明一个游标 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可以用来向上遍历有向图,找出其直系父辈。注意定义成local类型的cursor ![@more@]PROCEDURE sp_get_all_lineal_parent @node_id int, @...
  • 有返回值的存储过程(列表 结果集)  案例:编写一个过程,输入部门编号,返回该部门所有员工的信息。 对该题的分析如下: 由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也...
  • CREATE 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...
  • 游标概述 概括来说,游标是一种临时的数据库对象,即用来存放一个表所有信息或者表的一...如果处理过程需要重复频繁的应用一个结果集,创建游标比不断查询数据库快捷的多。 注意游标建立的一些规范 1、变量建立在游
  • 今天在开发,需要用到存储过程返回多条记录,用到了cursor.于早上网查找有关ibatis配置cursor的文章,大多数的文章代码只提到了关键部分,于是拿来安到自己的项目上,花了一下午的时间来调试,总是报错总结了以下...
  • mysql存储过程中两个CURSOR嵌套使用

    千次阅读 2013-06-25 16:22:04
    昨天遇到一个mysql开发的问题,从网上发现一篇文章,...mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有
  • 先定义一个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_...
  • 1. 为何使用游标: 使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库检索数据后,结果放在内存的一块区域,且结果往往是一个含有多个记录的集合。游标机制允许用户在...
  • 摘要:主要记录了oracle的stored procedure...存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行
  • mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有一个userid item表 字段只有一个itemid ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,311
精华内容 524
关键字:

存储过程中cursor