navicat中创建存储过程、触发器和使用游标的简单实例(图文)

 更新时间:2017年2月19日 09:01  点击:1959

1、建表
首先先建两张表(users表和number表),具体设计如下图:
1.jpg
2.jpg

2、存储过程
写一个存储过程,往users表中插入数据,创建过程如下:
3.jpg
4.jpg
5.jpg

代码如下

BEGIN
 #Routine body goes here...
 declare n bigint;
 set n = 201121029684;
 while n <= 201121029694
 do
 insert into users(student_ID) values(n);
 set n = n + 1;
 end while;
END

6.jpg
执行存储过程后可以看到users表中的数据如下:
7.jpg

整个存储过程的编写就完成了,当然这只是一个极为简单的例子,仅供入门参考。

3、触发器

在写触发器之前,我们先把users的数据清空

truncate table users; 

现在我们有两个表,我要做的事情就是,当我往users中插入数据后,number中也相应变化:

例如,number表中有一条初始数据,id=1,num=0;

当我往users中插入一条数据后,就触发number表中的num字段就加1,也就是记录用户数。

下面我们来实现这个小小的功能。

右击users表,选择设计表

8.jpg
选择触发器选项
9.jpg
10.jpg
11.jpg

begin
 update number
 set num = (select count(*) from users) ;
end

保存后,再往users表中添加新数据,再查看一下number中的数据,你会神奇的发现,number表中的数据也变了,自己动手试一下吧!

ps:存储过程需要程序员自己去执行,触发器,顾名思义,自动触发。

4、游标使用
我现在想做的是将student_ID字段都加上100,通过这个例子简单展示一下游标的使用。

创建一个存储过程,创建方式参考上面步骤。存储过程代码如下:

12.jpg

BEGIN
 #Routine body goes here...

 declare tmp bigint default 0;
 declare cur CURSOR FOR SELECT student_ID FROM users; -- 定义游标
 /*
 02000 发生下述异常之一: 
 SELECT INTO 语句或 INSERT 语句的子查询的结果为空表。 
 在搜索的 UPDATE 或 DELETE 语句内标识的行数为零。 
 在 FETCH 语句中引用的游标位置处于结果表最后一行之后。


 */
 declare CONTINUE HANDLER FOR SQLSTATE '02000' set tmp = 0; 


 OPEN cur; -- 打开游标
 FETCH cur INTO tmp; -- 游标向下走一步


 WHILE(tmp != 0)
 DO 
 select tmp; -- 将tmp打印出来,会发现tmp就像一个指针,一开始指向第一行,游标走一步,则指向下一行记录


 UPDATE users
 SET student_ID = tmp + 100
 WHERE student_ID = tmp;
 FETCH cur INTO tmp;
 END WHILE;

 CLOSE cur; -- 关闭游标
END

执行上面的存储过程,你会发现,users中的数据如你所愿的发生了变化。

[!--infotagslink--]

相关文章

  • 金额阿拉伯数字转换为中文的存储过程

    Create Procedure AtoC @ChangeMoney Money as Set Nocount ON Declare @String1 char(20) Declare @String2 char(30) ...2016-11-25
  • PHP操作MSSQL存储过程修改用户密码

    存储过程在数据库的应用中我们用到的非常的多了,下面我们来看一篇关于PHP操作MSSQL存储过程修改用户密码的例子,具体的如下所示。 mssql2008 存储过程 下面可以直接...2016-11-25
  • MySql存储过程之逻辑判断和条件控制

    具体详情请看下文小编给大家带来的知识点。同编写程序类似,存储过程中也有对应的条件判断,功能类似于if、switch。在MySql里面对应的是IF和CASE1、IF判断IF判断的格式是这样的:IF expression THEN commands [ELSEIF ex...2015-10-21
  • PHP调用MySQL存储过程并返回值实现程序

    本文章来给大家详细介绍在php中如何来调用执行mysql存储过程然后返回由存储过程返回的值了,有需要了解的同学可进入参考。 。调用存储过程的方法。 a。如果存储过...2016-11-25
  • C#调用存储过程详解(带返回值、参数输入输出等)

    这篇文章主要介绍了C#调用存储过程的方法,结合实例形式详细分析了各种常用的存储过程调用方法,包括带返回值、参数输入输出等,需要的朋友可以参考下...2020-06-25
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • c#调用存储过程实现登录界面详解

    c#调用存储过程实现登录界面详解...2020-06-25
  • c#获取存储过程返回值示例分享

    这篇文章主要介绍了C#获取存储过程返回值的方法,大家参考使用吧...2020-06-25
  • 在ACCESS 中调用后台存储过程

    ACCESS是一个Client/Server的优秀前端开发工具,具有易学易用,界面友好,开发简单,和其他数据库接口灵活。但是,它要对大量数据处理时,速度比较慢。深圳供电局现有60万用户,下...2016-11-25
  • C#调用Oracle存储过程的方法

    这篇文章主要介绍了C#调用Oracle存储过程的方法,包含数据库及C#对应的调用代码,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • oracle 存储过程、函数和触发器用法实例详解

    这篇文章主要介绍了oracle 存储过程、函数和触发器用法,结合实例形式详细分析了oralce 存储过程、函数和触发器具体功能、原理、定义、使用方法及相关操作注意事项,需要的朋友可以参考下...2020-07-11
  • Oracle存储过程案例详解

    这篇文章主要介绍了Oracle存储过程案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-13
  • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例

    这篇文章主要介绍了C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息,结合实例形式总结分析了C#针对SQLServer数据库存储过程及参数信息的各种常见操作技巧,需要的朋友可以参考下...2020-06-25
  • 取得拼音字头的存储过程

    -- ============================================= -- Create scalar function (NWGetPYFirst) -- ============================================= IF EXISTS (SELE...2016-11-25
  • MySQL 存储过程的优缺点分析

    存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。本文将分析存储过程的优缺点...2021-05-20
  • 三层+存储过程实现分页示例代码

    本文为大家介绍下三层+存储过程分页的具体实现,前后台及存储过程代码如下,感兴趣的朋友可以参考下哈...2021-09-22
  • 内嵌或嵌入SQL和存储过程之对比

    问:为什么我的内嵌SQL或嵌入SQL 要比我的存储过程运行的快? 答:重编译可能是存储过程运行比较慢的原因。要确认这一点,您需要做一些性能测试,例如:看一下每种类型的查询和...2016-11-25
  • php程序中调用mysql存储过程实例

    php与mysql本来就是天生的一对了,下面我来介绍在php程序中怎么调用在mysql中己经写好的存储过程,大家一起来看看具体实现方法。 Mysql存储过程创建语法 代...2016-11-25
  • Oracle数据库创建存储过程的示例详解

    这篇文章主要介绍了Oracle数据库创建存储过程的示例详解,存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作。对此感兴趣可以了解一下...2020-12-08
  • SQL Server中利用存储过程来高性能地进行分页

    分页查询的方法已经很多很多,在这里我也加入成为其中一员。 SQL Server中有一个Set Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处...2016-11-25