- 浏览: 829752 次
- 性别:
- 来自: 北京、四川
文章分类
最新评论
-
sunbeamzheng:
总结的很好,好好看看。 拷贝问题确实很需要注意,特别是影不影响 ...
java深拷贝与浅拷贝 -
xmh8023:
...
获取POST数据的值 -
xmh8023:
我访问别的服务器怎么办?急求
获取POST数据的值 -
xmh8023:
String urlString="http://l ...
获取POST数据的值 -
lv12312:
Tomcat 7的老版本么?有bug的,https://iss ...
JMX问题
mysql存储过程的例子:
一.创建存储过程
1.基本语法:
CREATE DEFINER=`root`@`%` PROCEDURE `proc_pay_fill_rule`(IN strdate varchar(10))
begin
.........
end
2.参数传递
`proc_pay_fill_rule`(IN strdate varchar(10))
strdate参数从调用的时候传入,例如:call proc_pay_fill_rule('2009-02-01')
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
四.区块,条件,循环
1.区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句
if 条件 then
statement
else
statement
end if;
如:
是判断某一个数据库是否有数据。
3.循环语句
1)首先定义游标,语法如:DECLARE ... CURSOR FOR SELECT ... FROM ... 例子如下:
2)声明一个游标使用的变量,(用处不是很明白,在打开游标之前还要set done=0;好像是用于跳出循环用的,)如:declare continue handler for not found set done=1;
2)打开游标,open ...;如:open pay_rule_cursor.
3)开始循环,name:loop 如:loop1:loop
4)把游标的值插入到声明的变量中去,语法:fetch ...(游标名) into ....(变量名列表),如:
5)接着加上
好像是跳出循环用。
6)接着就是执行需要的操作,如:
7)结束循环,如:end loop loop1;
8)关闭游标,如:CLOSE pay_rule_cursor;
我是采用了这个流程才正确执行了循环。
五.其他常用命令
1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
2.show create procedure sp_name
显示某一个存储过程的详细信息
参考文章:http://blog.csdn.net/crazy_rain/archive/2007/07/06/1680799.aspx
DELIMITER $$ DROP PROCEDURE IF EXISTS `cn_games`.`proc_pay_fill_rule`$$ CREATE DEFINER=`root`@`%` PROCEDURE `proc_pay_fill_rule`(IN strdate varchar(10)) BEGIN declare done int; DECLARE price float; DECLARE cpid varchar(10); DECLARE producttype varchar(10); DECLARE startvalue bigint(20); DECLARE endvalue bigint(20); DECLARE cppercent float; /*通用规则*/ DECLARE pay_rule_cursor cursor for SELECT cp_id,product_type, start_value,end_value,cp_percent from t_cp_percent WHERE EXTRACT(YEAR_MONTH from start_date)<=EXTRACT(YEAR_MONTH from strdate) and EXTRACT(YEAR_MONTH from end_date)>=EXTRACT(YEAR_MONTH from strdate) and cp_id='0' and product_type=''; /*特殊cp的支付规则*/ DECLARE special_pay_rule_cursor cursor for SELECT cp_id,product_type, start_value,end_value,cp_percent from t_cp_percent WHERE EXTRACT(YEAR_MONTH from start_date)<=EXTRACT(YEAR_MONTH from strdate) and EXTRACT(YEAR_MONTH from end_date)>=EXTRACT(YEAR_MONTH from strdate) and cp_id!='0'; /*特殊cp的productType(产品类型)支付规则*/ DECLARE special_pt_pay_rule_cursor cursor for SELECT cp_id,product_type, start_value,end_value,cp_percent from t_cp_percent WHERE EXTRACT(YEAR_MONTH from start_date)<=EXTRACT(YEAR_MONTH from strdate) and EXTRACT(YEAR_MONTH from end_date)>=EXTRACT(YEAR_MONTH from strdate) and cp_id!='0' and product_type!=''; declare continue handler for not found set done=1; drop table if exists TMP_t_pay_month; CREATE TEMPORARY TABLE `TMP_t_pay_month` ( `stat_date` varchar(15) default NULL, `cp_id` varchar(10) default NULL, `product_type` varchar(10) default NULL, `stat_num` varchar(20) default NULL, `stat_totle_fee` varchar(20) default NULL, `stat_finally_fee` varchar(20) default NULL, `cp_percent` float default NULL ) type heap; if strdate is not null THEN /*对第二次出帐进行限制*/ if exists (select id from t_pay_month where left(stat_date,7)=left(strdate,7) limit 0,1) then select "1"; else /*把数据导入到临时表中*/ insert into TMP_t_pay_month (stat_date,cp_id,product_type,stat_num,stat_totle_fee,stat_finally_fee,cp_percent) select left(stat_date,7),cp_id,product_type,sum(orders),sum(income),0,0 from t_cp_report group by left(stat_date,7),cp_id,product_type; /*通用的支付规则开始循环*/ set done=0; open pay_rule_cursor; loop1:loop /*把值插入到变量中*/ fetch pay_rule_cursor into cpid,producttype,startvalue,endvalue,cppercent; if done=1 then leave loop1; end if; /*更新临时表中的比值*/ update TMP_t_pay_month set cp_percent=cppercent where stat_totle_fee>=startvalue and stat_totle_fee<endvalue; end loop loop1; close pay_rule_cursor; /*特殊cp的支付规则开始循环*/ set done=0; open special_pay_rule_cursor; loop2:loop fetch special_pay_rule_cursor into cpid,producttype,startvalue,endvalue,cppercent; if done=1 then leave loop2; end if; update TMP_t_pay_month set cp_percent=cppercent where stat_totle_fee>=startvalue and stat_totle_fee<endvalue and cp_id=cpid; end loop loop2; CLOSE special_pay_rule_cursor; /*特殊cp的产品的支付规则开始循环*/ set done=0; open special_pt_pay_rule_cursor; loop3:loop fetch special_pt_pay_rule_cursor into cpid,producttype,startvalue,endvalue,cppercent; if done=1 then leave loop3; end if; update TMP_t_pay_month set cp_percent=cppercent where stat_totle_fee>=startvalue and stat_totle_fee<endvalue and cp_id=cpid and product_type=producttype; end loop loop3; CLOSE special_pt_pay_rule_cursor; /*更新临时表中的最终支付的字段的值*/ update TMP_t_pay_month set stat_finally_fee=ROUND(stat_totle_fee*cp_percent); /*把数据由临时表插入到正式表中,目前因为测试把cp_percent字段的值为总金额*/ insert into t_pay_month (stat_date,cp_id,product_type,stat_num, stat_fee,cp_percent, pass_status, pay_status, create_date) select stat_date,cp_id,product_type,stat_num,stat_finally_fee,cp_percent,0,0,now() from TMP_t_pay_month; end if; end if; END$$ DELIMITER ;
一.创建存储过程
1.基本语法:
CREATE DEFINER=`root`@`%` PROCEDURE `proc_pay_fill_rule`(IN strdate varchar(10))
begin
.........
end
2.参数传递
`proc_pay_fill_rule`(IN strdate varchar(10))
strdate参数从调用的时候传入,例如:call proc_pay_fill_rule('2009-02-01')
二.调用存储过程
1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程
1.基本语法:
drop procedure sp_name//
2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
四.区块,条件,循环
1.区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码
2.条件语句
if 条件 then
statement
else
statement
end if;
如:
if exists (select id from t_pay_month where left(stat_date,7)=left(strdate,7) limit 0,1) then statement else statement
是判断某一个数据库是否有数据。
3.循环语句
1)首先定义游标,语法如:DECLARE ... CURSOR FOR SELECT ... FROM ... 例子如下:
DECLARE pay_rule_cursor cursor for SELECT cp_id,product_type, start_value,end_value,cp_percent from t_cp_percent WHERE EXTRACT(YEAR_MONTH from start_date)<=EXTRACT(YEAR_MONTH from strdate) and EXTRACT(YEAR_MONTH from end_date)>=EXTRACT(YEAR_MONTH from strdate) and cp_id='0' and product_type='';
2)声明一个游标使用的变量,(用处不是很明白,在打开游标之前还要set done=0;好像是用于跳出循环用的,)如:declare continue handler for not found set done=1;
2)打开游标,open ...;如:open pay_rule_cursor.
3)开始循环,name:loop 如:loop1:loop
4)把游标的值插入到声明的变量中去,语法:fetch ...(游标名) into ....(变量名列表),如:
fetch pay_rule_cursor into cpid,producttype,startvalue,endvalue,cppercent;
5)接着加上
if done=1 then leave loop1; end if;
好像是跳出循环用。
6)接着就是执行需要的操作,如:
update TMP_t_pay_month set cp_percent=cppercent where stat_totle_fee>=startvalue and stat_totle_fee<endvalue;
7)结束循环,如:end loop loop1;
8)关闭游标,如:CLOSE pay_rule_cursor;
我是采用了这个流程才正确执行了循环。
五.其他常用命令
1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等
2.show create procedure sp_name
显示某一个存储过程的详细信息
参考文章:http://blog.csdn.net/crazy_rain/archive/2007/07/06/1680799.aspx
发表评论
-
proxool试用
2014-03-26 14:00 949配置文件: <?xml version=" ... -
DB2联合数据库配置实例(转载)
2010-06-21 17:11 1754由于需要使用到两台机器上的db2数据库读取数据的需求,因此使用 ... -
mongo的初体验
2009-12-04 15:40 3049首先在mongo官网下载Windows的版本 启动服务:mo ... -
db2的sql语句报错的状态码的解释
2009-11-04 20:57 4301含义 要获得子代码, 参阅... 00 完全成功完成 表 3 ... -
sql在不同数据库查询前几条数据
2009-10-15 12:54 1957sql在不同数据库查询前几条数据 1. ORACLE S ... -
db2数据库表的导入导出数据库表
2009-10-14 20:47 1931导出表结构,命令行如下: db2look -d dbname ... -
利用索引优化sql语句
2009-07-24 15:28 1488转载地址:http://www.cnblo ... -
mysql的优化
2009-03-13 09:15 1152地址:http://www.blogjava.net/wang ... -
Hibernate中text字段诡异出错
2009-03-10 17:45 3155Hibernate中text字段诡异出错 描述:最初的sql语 ... -
IN与EXISTS和INNER JOIN执行效率
2008-12-30 19:21 4082主要是查询日志里面的数据个数,过滤掉一些非法ip,手机上的,因 ... -
从一个数据库导入到另一个数据库中
2008-12-24 18:48 5876从一个数据库导入到另一个数据库中 package cn.d ... -
sql去除重复以及列转行sql语句
2008-12-24 11:37 7867工作中非常实用的sql语句 数据: userid si ... -
mysql数据库备份
2008-12-19 21:50 1247-- 备份 test_database 数据库 /usr/bi ... -
mysql(免安装版)的一些基本命令
2008-12-04 22:57 1487mysql中的命令行操作: 1、默认的用户名是root,密码是 ... -
两个数据库的更新操作
2008-11-10 14:09 1332两个数据库的更新操作,把一个数据库中的表的数据更新到另一个数据 ... -
set命令详解
2008-10-20 12:03 1498一、用set命令设置自定义变量 显示、设置或删除 cmd.ex ... -
数据库备份(ms sql server)
2008-10-13 15:04 1362@ECHO off ECHO database ba ... -
数据库还原(ms sql server)
2008-10-13 15:02 1521@ECHO off ECHO database ba ...
相关推荐
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者编写包含一系列SQL语句的可重复使用的代码块。在MySQL 5及以上版本中,存储过程极大地提高了数据库操作的效率和灵活性。下面将对存储过程的几个关键...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
总结来说,"Debugger for MySQL"这样的工具是MySQL存储过程开发和维护的有力助手,它提供了断点调试、变量查看等核心功能,使得复杂存储过程的调试工作变得更加简单和高效。熟练掌握这类工具的使用,将极大地提升...
### MySQL存储过程实现分页 #### 背景与需求 在数据库操作中,分页是一种常见的需求,尤其是在处理大量数据时。通过分页技术,可以有效地减少每次查询的数据量,提高系统的响应速度和用户体验。MySQL作为一种广泛...
总结来说,MySQL的分页存储过程提供了一种高效、可复用的方式来处理分页查询,减少了直接使用OFFSET可能导致的性能问题。通过创建存储过程并在应用程序中调用,我们可以更好地控制分页逻辑,提高查询速度,提升用户...
### MySQL存储过程基础知识点 #### 1. 存储过程的定义和示例 存储过程是存储在MySQL服务器上的预编译的SQL代码段,它能够接受参数、执行一系列的SQL语句和流程控制语句。存储过程可以提高数据库操作的效率,同时...
### MySQL存储过程与函数详解 #### 一、概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和存储方面提供了强大的支持。其中,存储过程和函数是MySQL提供的两种重要的编程特性,它们可以帮助开发者...
### PHP中调用MySQL存储过程 #### 背景与目的 在Web开发中,PHP是一种广泛使用的服务器端脚本语言,它与MySQL数据库结合得非常紧密,为开发者提供了强大的功能来处理数据。存储过程是预编译好的SQL代码块,它们...
资源包中囊括了MySQL数据库中的存储过程的...该资源下所有内容都是本人的日常软件开发经验总结,对于初学者使用MySQL存储过程的程序员具有重要参考价值,问大家要10分是不过分的,用过就知道了,欢迎大家下载参考及使用
在本篇总结文档中,我们将探讨MySQL存储过程的简单应用,包括循环结构、创建临时表、删除数据、分页查询以及动态存储过程的编写。 首先,让我们了解一下什么是存储过程。存储过程是一组为了完成特定功能的SQL语句集...
总结一下,MySQL中的存储过程是执行重复任务和复杂逻辑的强大工具。通过创建存储过程并结合循环结构,可以实现批量添加记录的功能。理解并熟练掌握这一技术,对于数据库管理和开发工作来说是非常有价值的。
总结来说,Kettle批量导出MySQL存储过程涉及到的关键知识点有:Kettle的数据流设计、MySQL的存储过程、数据库元数据获取、循环控制、文件生成和命令行脚本的创建。熟练掌握这些技能,将有助于我们在数据库管理和维护...
MySQL存储过程是数据库中一种非常实用的功能,它允许开发者封装一系列SQL语句成一个可重复使用的单元,便于管理和执行复杂的数据库操作。本篇文章将详细探讨如何在MySQL中创建存储过程、调用存储过程以及声明和赋值...
Mysql 存储过程,函数,临时表 存储过程包括输入返回,可供项目中遇到难题的人解决一下,我曾为此费了好大精力,最后总结出来共大家分享
### MySQL存储过程详解 #### 一、MySQL存储过程概述 MySQL 存储过程是一种预编译的 SQL 代码块,可以包含复杂的逻辑控制结构。它能够接收输入参数、设置输出参数,并通过调用来执行一系列数据库操作。存储过程提高...