1。存储过程有返回参数的
DELIMITER $$ //申明将mysql中 ;结束标签改为 以$$结束
USE `gaia`$$
DROP PROCEDURE IF EXISTS `returnProcedure`$$
IN 为输入类型 OUT 为输出类型 INOUT 既可以为输入类型也可以为输出类型
CREATE DEFINER=`root`@`localhost` PROCEDURE `returnProcedure`(IN pram1 DATETIME,OUT pram2 VARCHAR(255))
BEGIN
DECLARE v_table VARCHAR(255) DEFAULT 'item_visit_stats';//申明为局部变量,在改存储过程有效
SET @v_out=NULL;//申明为全局变量
SET @v_sql=CONCAT('select iid into @v_out from ',v_table,' where business_day ="',pram1,'"');
SELECT @v_sql;
PREPARE statement FROM @v_sql;
EXECUTE statement;
SELECT @v_out INTO pram2;
END$$
DELIMITER ;
2。存储过程不带返回参数
DELIMITER $$
USE `gaia`$$
DROP PROCEDURE IF EXISTS `pvtouv`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pvtouv`(IN `v_business_day` DATETIME)
BEGIN
DECLARE v_table_name VARCHAR(20) DEFAULT 'user_visit';
DECLARE v_referer TEXT;
DECLARE v_shop_id BIGINT;
DECLARE v_sid, v_uid, v_identify_id VARCHAR(255);
DECLARE v_view_time DATETIME;
DECLARE v_page_type INT;
DECLARE v_origin_type INT;
DECLARE v_exit, v_count INT DEFAULT 0;
//下面这句是申明游标
DECLARE cur_page_visit CURSOR FOR SELECT referer, shop_id, uid, view_time, page_type, origin_type, identify_id FROM page_visit;
//为游标设置标志位,当游标遍历完成后没数据 则设置v_exit 为1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_exit = 1;
#SELECT NOW() AS _begin;
OPEN cur_page_visit;//打开游标
loop_lable: LOOP
FETCH cur_page_visit INTO v_referer, v_shop_id, v_uid, v_view_time, v_page_type, v_origin_type, v_identify_id;
#if v_count > 10 then
# SET v_exit = 1;
#end if;
IF v_exit = 1 THEN
LEAVE loop_lable;
END IF;
#SET v_count = v_count +1;
BEGIN
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_exit = 0;
SET @v_id = NULL, @v_second_type = NULL, @v_pv_count = NULL;
SET @v_sql = CONCAT('SELECT id ,second_page_type,page_visit_count into @v_id, @v_second_type, @v_pv_count FROM ',v_table_name,' WHERE business_day = "',v_business_day,'" AND shop_id = ',v_shop_id,' AND uid = "',v_uid,'"');
#select @v_sql;
PREPARE statment FROM @v_sql;
EXECUTE statment;
#DEALLOCATE PREPARE statment;
SET @v_sql = NULL;
IF v_identify_id IS NULL THEN
SET v_identify_id = '';
END IF;
#select @v_id;
IF @v_id IS NULL THEN
SET @v_pv_count = 1;
#select v_business_day, v_shop_id, v_view_time, v_view_time, @v_pv_count, v_uid, v_origin_type, v_page_type, v_identify_id, v_page_type, v_identify_id;
SET @v_sql = CONCAT('INSERT INTO ',v_table_name,' (business_day,shop_id,begin,end,page_visit_count,uid,origin_type,first_page_type,first_page_id,second_page_type,second_page_id,last_page_type,last_page_id)
VALUES("',v_business_day,'",',v_shop_id,',"',v_view_time,'","',v_view_time,'",',@v_pv_count,',"',v_uid,'",',v_origin_type,',',v_page_type,',"',v_identify_id,'",-1,NULL,',v_page_type,',"',v_identify_id,'")');
ELSEIF @v_second_type = -1 THEN
SET @v_pv_count = @v_pv_count + 1;
#select v_page_type, v_identify_id, @v_pv_count, v_view_time, @v_id;
SET @v_sql = CONCAT('UPDATE ',v_table_name,' SET second_page_type ="',v_page_type,'", second_page_id = "',v_identify_id,'", last_page_type = "',v_page_type,'", last_page_id = "',v_identify_id,'",
page_visit_count = ',@v_pv_count,', end = "',v_view_time,'" WHERE id = ',@v_id);
ELSE
SET @v_pv_count = @v_pv_count + 1;
SET @v_sql = CONCAT('UPDATE ',v_table_name,' SET last_page_type = "',v_page_type,'", last_page_id = "',v_identify_id,'",page_visit_count = ',@v_pv_count,', end = "',v_view_time,'" WHERE id = ',@v_id);
END IF;
#SELECT @v_sql;
PREPARE statment FROM @v_sql;
EXECUTE statment;
#DEALLOCATE PREPARE statment;
SET @v_sql = NULL;
CALL addToItemVisitStats(v_business_day, v_shop_id, v_page_type, v_identify_id);
END;
END LOOP;
CLOSE cur_page_visit;
CALL stats(v_business_day);
SELECT NOW() AS _end;
END$$
DELIMITER ;
对于有返回值的存储过程测试和获取返回值
@Test
public void returnProcedure(){
CallableStatement cs;
try {
cs = (CallableStatement) hibernateTemplate.getSessionFactory().getCurrentSession().connection().prepareCall("Call returnProcedure(?,?)");
cs.setString(1,"2010-6-26");
cs.registerOutParameter(2,Types.VARCHAR);
cs.execute();
System.out.print(cs.getString(2));
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
总结:
1。关于存储过程的调试,可以用select 变量名;进行输出到控制台进行显示
2。mysql中对于返回结果是列表类型的好像暂时不支持,但是可以将返回值存储在临时的一张表中,程序可以对该表进行处理
分享到:
相关推荐
mysql存储过程和函数(超经典)个人总结,本人总结了mysql存储过程极其用到的函数,实用!
总结来说,MySQL存储过程是数据库开发中的利器,它们提高了代码的可复用性和安全性,同时也简化了复杂的业务逻辑。Toad for MySQL作为一款优秀的数据库管理工具,提供了丰富的功能来支持存储过程的创建、管理和优化...
首先,数据库(DataBase,DB)是存储有组织数据的仓库,它允许用户高效地存储和检索信息。数据库管理系统(DataBase Management System,DBMS)是用于操纵和管理这些数据库的软件。SQL,即Structured Query Language...
### 数据库存储过程的写法及连接各种数据库的方法 #### 概述 本文将详细介绍如何在不同的数据库系统中编写存储过程以及如何建立与这些数据库的连接。存储过程是一种预编译的SQL代码块,它可以存储在数据库服务器上...
此外,手册还会讲解事务处理、存储过程、触发器、视图等高级特性,帮助用户深入理解MySQL的数据库设计和管理。 数据库优化是提高系统性能的关键,"数据库SQL优化大总结之 百万级数据库优化方案.pdf"则专门探讨了这...
3. 选择社区版:在下载页面,选择“MySQL Community Server (GPL)”选项,这是MySQL的开源版本,适合个人和开发用途。 4. 选取适用的Windows版本:接着,选择适合你当前Windows操作系统的MySQL Installer。通常会...
总结来说,通用的分页存储过程是Web开发中必不可少的工具,它通过SQL的预编译和逻辑封装,实现了高效、灵活的分页查询。掌握这一技术,对于任何数据库开发者和Web程序员来说,都是提升项目质量和效率的关键步骤。
根据给定的文件信息,我们可以总结出以下关于MySQL备份脚本的重要知识点: ### MySQL备份脚本概述 在IT行业中,数据安全是至关重要的,而数据备份则是保障数据安全的关键环节之一。MySQL作为广泛使用的数据库管理...
- 如果Access中有触发器、存储过程或复杂的业务逻辑,可能需要在MySQL中重新实现。 总结起来,"db2mysql access to mysql 数据库转换"是一个帮助用户跨越数据库平台障碍的实用工具。了解数据库原理、SQL语言以及...
#### 三、MySQL存储引擎 MySQL支持多种存储引擎,其中最常用的两种是MyISAM和InnoDB。 - **MyISAM**:早期默认的存储引擎,不支持事务处理,但具有较快的数据检索速度。 - **InnoDB**:5.5版本后成为默认的存储...
- **存储引擎改进**:提到了MySQL 5.7对InnoDB存储引擎进行的重大更新,如在线索引构建、表空间管理等功能的增强。 #### 1.5 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 5.7...
1. **InnoDB存储引擎优化**:MySQL 5.5对InnoDB存储引擎进行了显著优化,包括支持更大的行内数据存储、更高的并发性以及更快的全文索引搜索。InnoDB是MySQL的默认事务处理引擎,适用于需要ACID(原子性、一致性、...
总结来说,MySQL的下载与安装涉及多个步骤,包括选择合适的安装包、配置组件、设定服务器参数、创建用户以及安装必要的依赖。理解这些步骤有助于顺利安装并使用MySQL,为你的项目提供稳定的数据存储和处理服务。
【PHP个人通讯录与MySQL数据库】是一个基于PHP编程语言实现的个人联系人管理系统的实例,它结合了MySQL数据库来存储和检索联系人信息。在这个系统中,用户可以通过登录功能访问他们的通讯录,添加新的联系人记录,而...
总结来说,MySQL 5.5.6 免装版提供了一种灵活的部署方式,适用于个人学习、小型项目或者临时测试环境。尽管它无需安装,但依然具备完整的数据库管理功能,并在性能、安全和易用性上有着良好的表现。
总结起来,"MySQL.zip启动"涉及到的关键知识点包括:ZIP文件的解压,批处理文件的使用,MySQL服务器的启动命令,以及环境变量配置。对于初学者来说,了解这些基础知识对于成功运行MySQL服务器至关重要。
### MySQL安装过程详解 #### 一、安装准备与启动 - **步骤1**: 下载MySQL安装包后,首先双击`Setup.exe`开始安装过程。此时会出现安装向导的初始界面,确认安装语言等基本信息。 - **步骤2**: 在安装向导的欢迎...
- **触发器**:是一种特殊类型的存储过程,可以在特定事件(如INSERT、UPDATE或DELETE操作)发生时自动执行。 - **存储过程**:一组预先编写的SQL语句,可以接受输入参数并返回结果,类似于函数或子程序。 #### 3. ...