精华内容
下载资源
问答
  • Oracle存储过程中cursor + with用法

    千次阅读 2019-09-18 10:01:47
    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
    展开全文
  • Mysql存储过程中使用cursor

    千次阅读 2018-11-11 09:52:14
    Mysql存储过程中使用cursor

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                    一、表
    学生表
    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);           

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • 示例如下: 代码如下:CREATE PROCEDURE `justifyGroupNum`() NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT ” ... DECLARE cursor_name CURSOR FOR select c_group_id,count(*) as num from `t_group_member` where
  • 存储过程-cursor

    2013-01-21 16:57:59
    -----存储过程游标使用篇----- -- 1.隐式游标 : 隐式Cursor是系统自动打开和关闭Cursor. --SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数 --SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询...
    -----存储过程游标使用篇-----
    
    -- 1.隐式游标 : 隐式Cursor是系统自动打开和关闭Cursor.
    --SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数
    --SQL%FOUND  布尔型  值为TRUE代表插入、删除、更新或单行查询操作成功
    --SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反
    --SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假
    begin
      update student set s_name = 'modify' where s_id = 4; 
      if(sql%found) then
        Dbms_Output.put_line('find the rowdata 。。。');
        commit;
        else
        Dbms_Output.put_line('unfind the rowdata 。。。');
        rollback;
      end if;
    end;
    -- 2.显示游标
    declare
      cursor cur is select * from student;
      cursor cur2 is select * from student;
      stuRow student%rowtype;
    begin
      for stu in cur loop
        --stuRow := stu;
        Dbms_Output.put_line(stu.s_name);
      end loop;
     
      open cur2;
      loop
        Fetch cur2 into stuRow;
        Exit when cur2%notfound;
        Dbms_Output.put_line(stuRow.s_name);
      end loop;
      Dbms_Output.put_line(cur2%ROWCOUNT);
      if(cur2%isopen) then
        Dbms_Output.put_line('-close cur2-');
        close cur2;
      end if;
    end;
    -- 3.动态游标
    declare
      type cursor_type is ref cursor;
      cur cursor_type;
      sqlStr varchar2(40);
      rowData student%rowtype;
    begin
      sqlStr := 'select * from student';
      open cur for sqlStr;
      loop
        fetch cur into rowData;
        if(cur%notfound) then
          exit;
          Dbms_Output.put_line('-not find ...-');
        end if;
        Dbms_Output.put_line('-data-'||rowData.s_name);
      end loop;
      if(cur%isopen) then
       close cur;
      end if;
    end;
    展开全文
  • java调用Oracle存储过程返回Cursor

    千次阅读 2017-09-14 10:14:14
    1.创建包 create or replace package pack1 is type test_cursor is ref cursor;...2.创建存储过程 create or replace procedure pro1(test_uNo in number,test_res out pack1.test_cursor) is begin open test
  • 有返回值的存储过程(列表 结果集)  案例:编写一个过程,输入部门编号,返回该部门所有员工的信息。 对该题的分析如下: 由于Oracle的存储过程没有返回值,它的所有返回值都是通过out参数来代替的,列表同样也...
  • 存储过程中使用cursor

    2007-01-16 09:38:45
    在sqlserver的存储过程中使用cursor对象的例子[@more@]create proc p_test @cu1 cursor varying output, @cu2 curso...
  • create or replace procedure BUILDEMPLID(emp_cursor out sys_refcursor) is n_emplid number; n_emplid1 number; n_len number; r_cursor sys_refcursor; begin --UPDATE THE LAST ASSIGNMENT+1 IN TH...
  • 存储过程里的游标,其实就是结果集,然后想操作结果集中的数据,一行行读取游标即可 首先要声明一个游标 delimiter $$CREATE procedure changeName()begin declare stopflag int default 0; declare myname ...
  • DB2存储过程中LOAD CURSOR 使用

    千次阅读 2018-04-25 15:28:17
    记录下个人的经历: 1、目的: 需要通过创建一个存储过程,对一个数据量较大的表(千万级)进行数据统计,将统计之后的数据放入到另外一张 临时表,待其它操作处理。 2、实现思路:思路其实很简单,在sql ...
  • mysql 存储过程 cursor 范例

    千次阅读 2018-06-12 17:00:43
    declare no_list cursor for select no,id from table;select count(1) into v_total from table;open no_list;loop1:loop-- mysql cursor 不会自动退出cursor 循环,需自行增加条件判断 IF i &gt; v...
  • 我自己写的测试程序,下面是配置文件和代码,jdbc里是已经取到resultset了,而且也... #{v_refcur,jdbcType=CURSOR,mode=OUT,javaType=java.sql.ResultSet,resultMap=DateResult} ) } ```
  • MYSQL存储过程,使用LOOP/CURSOR对数据进行操作~
  • mysql存储过程中两个CURSOR嵌套使用

    千次阅读 2013-06-25 16:22:04
    昨天遇到一个mysql开发的问题,从网上发现一篇文章,...mysql存储过程中两个CURSOR嵌套使用遇到的问题 我的这个东西就是模拟用户购买商品的一个小东西 user是用户 item是商品 数据库里面有三个表 user表 字段只有
  • 存储过程cursor

    2009-02-28 16:36:47
    前面我们已经讨论了如何声明存储过程的返回结果集。这里我们讨论一下结果集返回类型的问题。结果集的返回类型有两种:调用者(CALLER) 和客户应用(CLIENT)。首先我们看一下声明这两种游标的例子: CREATE ...
  • 游标及存储过程 通过判断微信号是否存在执行不同的操作
  • sql2005 返回游标参数的存储过程CURSOR VARYING OUTPUT】
  • 今天在开发,需要用到存储过程返回多条记录,用到了cursor.于早上网查找有关ibatis配置cursor的文章,大多数的文章代码只提到了关键部分,于是拿来安到自己的项目上,花了一下午的时间来调试,总是报错总结了以下...
  • Java获取Oracle存储过程返回的Cursor,使用odbc6
  • 游标概述 概括来说,游标是一种临时的数据库对象,即用来存放一个表所有信息或者表的一...如果处理过程需要重复频繁的应用一个结果集,创建游标比不断查询数据库快捷的多。 注意游标建立的一些规范 1、变量建立在游
  • 游标 cursor使用存储过程对sql进行编程的时候,当查询的结果集是多个的时候,可以利用查询语句生成一个游标,对查询结果就行迭代。 BEGIN DECLARE _done INT DEFAULT false; DECLARE _name VARCHAR(50); -- ...
  • 先定义一个cursor: Procedure P_MYPROC ( PI_PARAM VARCHAR2)IS VI_A VARCHAR2(10):=;VI_B VARCHAR2(20):=;VI_C VARCHAR2(30):=; --定义 CURS
  • spring boot 的jpa是如何支持存储过程利用游标(CURSOR)返回数据集的 存储过程参数部分如下图所示: 有两个输入参数,一个输出参数。输出参数是个sys_refcursor 游标,因为该存储过程的作用是返回一个数据...
  • MySQL存储过程游标(cursor)示例

    千次阅读 2014-11-23 17:06:03
    Mysql创建存储过程,使用游标Cursor循环更新
  • 存储过程CURSOR使用

    千次阅读 2009-03-03 14:57:00
    create or replaceprocedure pro_exec_statas cursor log_info is select route_value,process_time,rsp_code,rsp_desc from log_interface_detail; cursor area_info is select city_no,pro_no,pro_name fr
  • oracle 存储过程及REF CURSOR的使用

    千次阅读 2014-02-27 17:16:09
    摘要:主要记录了oracle的stored procedure相关知识、从定义到使用。从最简单的例子入手、逐渐深入。同时后面结合了ref cursor的使用。顺便补充了在java如何使用。
  • cursor 与refcursor及sys_refcursor的区别 (转载) 2015年11月27日 15:16:19 cherish1forever 阅读数:2143 引用 一、显式cursor  显式是相对与隐式cursor而言的,就是有一个明确的声明的cursor。显式游标的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 81,684
精华内容 32,673
关键字:

存储过程中cursor