- 浏览: 1504670 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
drop procedure if exists test.get_title; delimiter $$ create procedure test.get_title(in id int) BEGIN select title,subtitle,pubname from titles,publishers where titleID=id and titles.pubID=publishers.pubID; end$$ call test.get_title(1); drop procedure if exists test.half; delimiter $$ create procedure test.half(in a int , out b DOUBLE) BEGIN set b = a/2; end $$ call test.half(15,@result); select @result;
2、变量
- 全局性的普通SQL变量。这类变量的名字前面都有一个“@”字符作为前缀。这些变量在SP里的用法与它们在普通SQL命令里的用法一样。它们的内容将一直保存到与MySQL服务器断开链接为止。
- SP内部使用的局部变量和参数。这些变量的名称前面没有“@”字符。必须在使用它们之前用declare命令对它们做出声明。局部变量的内容在过程或函数退出执行时即告丢失。局部变量只在对它们做出声明的那个begin-end语句块里有效。这意味着可以在同一个过程里声明多个同名的局部变量——只要它们不在同一个begin-end语句块里就行。
-
声明变量(declare)。变量的声明必须发生在begin-end语句块里,而且必须发生同一个begin-end语句块里的其他命令之前。
declare varname1,varname2,... datatype [default value];
示例代码:
drop procedure if exists test.test; create procedure test.test() BEGIN declare x int default 0; BEGIN DECLARE x int DEFAULT 1; if true then BEGIN DECLARE x int DEFAULT 2; select x ; END; end if; SELECT x as `outer`; END; select x as outest; END; call test.test();
3、对变量赋值 。SQL语言不允许以x=x+1的形式对变量进行赋值,必须使用SET或SELECT INTO命令做这件事。后者都是SELECT命令的一程变体,它以INTO varname 结果整条命令。这种语法变量要求SELECT命令返回且只能返回一条数据记录(不请允许是多条记录)。请注意,在函数里只能使用SET命令对变量赋值,这是因为函数里不允许使用SELECT或其他SQL命令。
# 在普通环境中使用变量例子 set @var1 = value1, @var2 = value2; select @var1:=value2; select 2 * 7 into var1; select @total:=count(*) from table where id =1 into @total; select @total:=count(*) from table where id =1 ; select title,subtitle from table1 where id =1 into @var_title,@var_subtitle; SELECT id, data INTO x, y FROM test.t1 LIMIT 1;
# 在存储过程中使用变量例子。 drop procedure if exists test.total; create procedure test.total() BEGIN declare x int default 0; select count(*) from name1 into x; select x; END; call total();
4、出错处理(出错处理句柄)
SP里的SQL命令在执行过程中可能会出错,所以SQL也像其他一些程序设计语言那样向程序员提供了一种利用出错处理句柄(error handler,也有称为“出错处理器”)来响应和处理这类错误的机制。
在一个Begin-end语句块里对出错处理句柄的定义必须出现在变量、光标、出错条件的声明之后、其他SQL命令之前;具体语法如下所示:
declare type handler for condition1, condition2, condition3;
下面对这个语法中的type、condition和command进行解释。
增加分类记录的存储过程:
表结构的SQL:
CREATE TABLE `categories` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(100) default NULL, `parent_id` int(10) unsigned default NULL, PRIMARY KEY (`id`) ) ;
drop procedure if exists test.test_insert; create procedure test.test_insert(in newcatname varchar(100), in parent int, out newid int) proc:BEGIN declare cnt int; set newid = -1; -- validation select count(*) from test.categories where parent_id = parent into cnt; if ISNULL(newcatname) or TRIM(newcatname) ="" then leave proc; end if; select count(*) from test.categories WHERE parent_id = parent and `name` = newcatname into cnt; if cnt =1 then select id from test.categories WHERE parent_id = parent and `name` = newcatname into newid; leave proc; end if; insert into test.categories (`name`,parent_id)values(newcatname,parent); set newid = LAST_INSERT_ID(); end proc; -- 调用不能与创建语句同时执行? call test.test_insert("category name 2",0,@newid); select @newid;
夺
发表评论
-
mysql中计算两点坐标距离
2016-09-12 15:35 112CREATE FUNCTION `calc_distanc ... -
在window 单机环境下将mysql cluster创建为自启动服务
2013-08-22 21:17 2015假设我的mysql cluster根目录是:D:\d ... -
mysql cluster 的一些错误解决方法记录。
2013-08-21 14:57 12881、ndb_mgmd的配置文件编码问题导致解析错误 ... -
Ubuntu 11.04 x64 编译安装mysql
2012-09-15 18:28 1317转自:http://www.cnblogs.com/sin ... -
面试时 遇到一个数据库SQL 成绩排名
2012-07-17 09:55 10021、累积排名 SELECT NAME ... -
ubuntu 11.4 二进制文件(tar.gz) 安装 mysql 5.5.x
2012-02-22 21:11 1127sudo /etc/init.d/mysql.server ... -
SQL 分组统计 两个字段 行转列
2012-02-08 17:20 4148select c.MRL,c.OPERATION_ID,c. ... -
记录错位方法
2011-05-28 21:03 871目的: select `value` ... -
你的MySQL安全了吗?加铸23道安全门
2011-03-22 12:39 1001使用MySQL,安全问题不能不注意。以下是MySQL提示的 ... -
MySQL函数的创建
2011-03-19 23:15 967drop function if exists shorten ... -
Mysql 配置SSL
2011-03-16 10:26 1236[client] ssl-ca=$DIR/cacert.pe ... -
Mysql SSL 配置
2011-03-16 10:15 3555转自:http://www.cnblogs.com/huqin ... -
在Navicate中使用 提示输入 方式输入SQL的参数。
2011-03-01 17:56 972select [$输入A] 输入参考: sele ... -
MySQL 地理时区管理
2011-01-14 11:33 1961MySQL经常被人们 ... -
两个不同表的SUM值相减
2011-01-12 15:39 1347select z.num2 - x.num1 from ( ... -
查询某条记录的前后两条
2011-01-07 11:05 704id target num 1 Gen ... -
navicate 9 注册码
2011-01-02 13:44 1566名:I Love China 组织:I Love China ... -
Percona Server 5.1.47-11.1 试用手记
2010-11-12 14:44 1935转自:http://seo3721.appspot.com/6 ... -
SQL获取上个月最后一个周末两天
2010-10-28 16:41 1505该语句可以获得: 上个月最后一个周末两天 ... -
MySQL where与having的区别
2010-10-28 10:51 1573WHERE子句是在第一步从表或视图中配全SELECT子句把数 ...
相关推荐
本文实例讲述了MySQL存储过程的异常处理方法。分享给大家供大家参考。具体如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE myProc -> (p_first_name VARCHAR(30), -> p_last_name VARCHAR(30)...
Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...
c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等
mysql经典教程+mysql存储过程讲解 重点讲解Mysql的存储过程,触发器,游标的使用 对mysql不太熟的朋友可以好好学习。。。
mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页
MySQL存储过程学习 MySQL存储过程 MySQL存储过程
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
MySQL存储过程 MySQL存储过程 MySQL存储过程 MySQL存储过程 MySQL存储过程
资源包中囊括了MySQL数据库中的存储过程的...该资源下所有内容都是本人的日常软件开发经验总结,对于初学者使用MySQL存储过程的程序员具有重要参考价值,问大家要10分是不过分的,用过就知道了,欢迎大家下载参考及使用
mysql中文手册.chm+mysql命令大全.chm+mysql存储过程.pdf
mysql存储过程 mysql存储过程 mysql存储过程 mysql存储过程
MySql 分页 存储过程 MySql 分页 存储过程 MySql 分页 存储过程
MySQL存储过程经典教程MySQL存储过程经典教程MySQL存储过程经典教程MySQL存储过程经典教程MySQL存储过程经典教程MySQL存储过程经典教程
mysql存储过程ppt
MySQL存储过程编程 可以看看 数据库 存储过程
mysql 存储过程 实战
mysql存储过程实例详细介绍了mysql存储过程的开发步骤
php中调用MySQL存储过程示例
mysql存储过程,存储函数练习,里面有详细代码,供大家参考