# 对于MySQL 5.0.45版本,需要重新定义一个输入结束标记符,如:delimiter //
# 在所有的存储过程中使用";"作为每一条语句的结束标记
# 而每一条MySQL语句都必须使用"//"作为结束标记;
drop procedure if exists phelloworld //
create procedure phelloworld()
begin
select 'Hello,World!' as F;
end;
//
drop procedure if exists padd //
create procedure padd
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as Sum;
end;
//
# 使用mysql变量调用存储过程
set @a = 10 //
set @b = 12 //
call padd(@a,@b) //
# 直接使用常量值调用存储过程
call padd(11,12) //
# 对数据库表进行操作
# 创建表
drop table if exists mapping //
create table mapping (
`cFieldID` smallint(5) unsigned not null,
`cFieldName` varchar(30) not null,
primary key(`cFieldID`)
)Engine=InnoDB default charset=utf8 //
insert into mapping values(1,'MarketValue') //
insert into mapping values(2,'P/L') //
insert into mapping values(3,'EName') //
insert into mapping values(4,'Nominal') //
insert into mapping values(5,'Chg') //
# 写一个存储过程,往mapping表中插入一条记录,并返回当前记录的总数
drop procedure if exists paddmapping //
create procedure paddmapping (
out cnt int
)
begin
declare maxid int;
select max(cFieldID)+1 into maxid from mapping;
insert into mapping values(maxid,'Hello');
select count(cFieldID) into cnt from mapping;
end //
# 定义一个包含输入输出参数的存储过程
drop procedure if exists pinoutmapping //
create procedure pinoutmapping (
in cfid int,
out cfnm varchar(30)
)
begin
select cFieldName into cfnm from mapping where cFieldID = cfid;
end;
//
# 在定义存储过程时使用输入参数:in inParam type
# 输入参数可以在存储过程中被修改,但是不能返回该输入参数的值
drop procedure if exists pinparam //
create procedure pinparam (
in inparam int
)
begin
select inparam;
# 在存储过程中改变输入参数的值
set inparam = 2;
select inparam;
end;
//
# 调用该存储过程之后再查看输入参数的值是否发生改变,虽然输入参数的值在存储过程中进行了修改
#
#在定义存储过程时使用输出参数:out outParam type
#输出参数可以在存储过程中进行修改,且能返回该输出参数的值
drop procedure if exists poutparam //
create procedure poutparam (
out outparam int
)
begin
select outparam;
# 改变输出参数的值
set outparam = 3;
select outparam;
end;
//
# 在定义存储过程时使用inout参数:inout inoutParam type
# 在调用存储过程时指定参数值,可在存储过程中改变该参数值且能返回
drop procedure if exists pinoutparam //
create procedure pinoutparam (
inout inoutparam int
)
begin
select inoutparam;
# 在存储过程中改变inout参数的值
set inoutparam = 3;
# 查看在存储过程中改变后的参数值
select inoutparam;
end;
//
# 在存储过程中定义变量:declare vname [,vname2 ...] vtype [default value]
# vtype是mysql中的数据类型:int,float,date,varchar(length)
# 变量赋值:set vname=value
drop procedure if exists pvarible //
create procedure pvarible ()
begin
declare uid int(8) default 0;
declare uname varchar(30) default 'root';
select uid as ID,uname as Name;
set uid = 1;
set uname = 'chench';
select uid as ID,uname as Name;
end;
//
# 用户变量
# (1)在MySQL客户端使用用户变量
select 'Hello,World!' into @hl //
select @hl //
set @gb = 'Good Bye!' //
select @gb //
set @gb = 1+2+3 //
select @gb //
# (2)在存储过程中使用用户变量
drop procedure if exists pgreetingworld //
create procedure pgreetingworld () select concat(@greeting,' World') //
set @greeting = 'Hello' //
call pgreetingworld() //
# (3)在存储过程间调用全局范围内的变量
set @vglobal="zhangsan" //
drop procedure if exists p1 //
create procedure p1 ()
begin
set @vglobal = 'wangwu'; -- 在存储过程中改变mysql全部变量的值
select @vglobal; -- 在存储过程中访问mysql全局变量的值
end;
//
drop procedure if exists p2 //
create procedure p2 ()
begin
select concat('variable last value is ',@vglobal);
end;
//
# 变量作用域
drop procedure if exists p3 //
create procedure p3()
begin
declare x1 varchar(15) default 'outter';
begin
declare x1 varchar(15) default 'inner';
select x1;
end;
select x1;
end;
//
# 存储过程中的条件语句
# 定义一个测试表
drop table if exists pt //
create table pt (
pid int unsigned auto_increment not null,
pname varchar(30) not null,
primary key(pid)
)Engine=InnoDB default charset = utf8 //
# (1)if-then -else语句:使用if var then else var end of结构
# 写一个根据传递的参数值是奇数还是偶数来插入数据库表相应的数据记录
drop procedure if exists p4 //
create procedure p4 (
in param int
)
begin
declare t int default 0;
set t = param % 2;
if t = 0 then
insert into pt values(null,'event number!');
else
insert into pt values(null,'odd number');
end if;
select * from pt;
end;
//
# (2)case语句:使用case var when-then ... end case结构
# 根据传递的参数值来插入相应的记录,往pt表中插入记录
drop procedure if exists p5 //
create procedure p5 (
in param int
)
begin
declare value int default -1;
set value = param % 2;
case value
when 0 then
insert into pt values(null,'even number');
else
insert into pt values(null,'odd number');
end case;
select * from pt;
end;
//
# 存储过程中的循环语句
# (1)while condition do(先条件再循环)
# ...
# end while
# 通过传递参数,连续插入新的记录到pt表中
delimiter //
drop procedure if exists p6 //
create procedure p6 (
in param int
)
begin
declare i int default 0;
if param > 0 then
while i < param do
insert into pt values(null,'param');
set i = i+1;
end while;
end if;
select * from pt;
end;
//
delimiter ;
# (2)repeat (先循环再条件)
# ...
# until condition
# end repeat
# 通过传递参数,连续插入新的记录到pt表中
delimiter //
drop procedure if exists p7 //
create procedure p7 (
in param int
)
begin
declare i int default 0;
if param > 0 then
repeat
insert into pt values(null,'repeat');
set i = i+1;
until i >= param
end repeat;
end if;
select * from pt;
#echo 'successfully!'
end;
//
delimiter ;
# (3)loop(没有初始条件,也没有结束条件)
# LOOP_LABEL:loop
# ...
# leave LOOP_LABEL --离开循环
# end loop --虽然使用leave离开了循环,但是仍然需要使用end loop作为loop的结束标记,这是语法固定结构
# 通过参数传递,往pt表中插入连续的记录
delimiter //
drop procedure if exists p8 //
create procedure p8 (
in param int
)
begin
declare i int default 0;
if param > 0 then
LOOP_LABEL:loop
insert into pt values(null,'loop');
set i = i+1;
if i >= param then
leave LOOP_LABEL; #满足条件就离开循环
end if;
end loop; #虽然已经使用leave离开了循环,但是必须要有loop结束标记
/*while i<param do
insert into pt values(null,'while');
set i=i+1;
end while;
*/
end if;
select * from pt;
end;
//
delimiter ;
#
# MySQL存储过程中使用查询结果的值来赋值给变量
# 如:select id into id_value from user where id = '';
# 当查询结果为空时不会进行赋值操作,即:id_value变量将保持原来的值
#
查询数据库中的存储过程
方法一:
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'
方法二:
show procedure status;
查看存储过程或函数的创建代码
show create procedure proc_name;
show create function func_name;
# 统计pt数据表中的记录总数,在Java程序中调用该存储过程
delimiter //
drop procedure if exists pcount //
create procedure pcount (
out count int
)
begin
#set autocommit = 0;
#start transaction;
select count(pid) into count from pt;
end;
//
delimiter ;
分享到:
相关推荐
MySQL视图及存储过程学习笔记
一、存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。而...
我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该...
MySQL核心技术学习笔记,包括从MySQL产品的安装到DQL语言的学习、DML语言的学习、DDL语言的学习、TCL语言的学习、视图、存储过程等,以及相关案例实现语句等等。
MySQL存储过程之java调用 9 MySQL存储过程实现动态查询 12 MySQL应用总结 12 MySQL数据管理 15 数据管理 15 MySQL数据导出 15 MySQL数据还原 15 MySQL灾难性复制恢复总结 16 MySQL授权管理 17 未解决及已解决问题 19...
非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 MySQL存储引擎 MySQL表操作 MySQL2 MySQL数据操作 MySQL单...
MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型,标识列,级联删除...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等
MySQL5.5学习笔记,里边是MySQL基础知识,包括对数据库,数据表,视图,数据类型和运算符,MySQL函数,存储过程和函数,以及对数据的增删改查等知识,还有MySQL用户管理以及数据备份与还原的知识!适合初学者学习~
然后重点讲解了MySQL存储过程的创建、调用、参数、条件和循环语句等知识,同时提供了详细的代码示例进行解释说明,内容系统全面。 适合人群: 需要掌握MySQL高级应用的数据库学习者。文中具体的代码示例可助力开发。 ...
内容概要:MySQL学习笔记,内容包括SQL基本语法、MySQL基础知识,包括存储引擎、索引、视图、锁、优化、存储结构等MySQL主要的内容。 适用人群:适合自学MySQL的同学使用。 能学到什么:MySQL从基础到进阶的全部内容...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知 识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型, 标识列,级联...
这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知 识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型, 标识列,级联...
《MySQL5.7学习笔记》将从MySQL5.7的安装、配置、使用等方面进行详细介绍,帮助读者快速掌握MySQL5.7的使用技巧。首先,我们将介绍MySQL5.7的安装方法,包括Windows和Linux平台的安装步骤。然后,我们将讲解MySQL5.7...
数据的重要性也就在一定程度上影射了数据库的重要性,因为数据领域的最重要的安全问题、存储问题、关系问题等,很多方面的整合都需要依靠数据库来完成。 举个例子,现在有很多数据分析师,他们每天最基本的工作往往...
这是我学习mysql数据库的时候做的学习笔记,增删查改,视图,自定义函数,自定义存储过程,触发器,索引,sql编程等等。
个人原创,根据自己的工作总结的,对工作的人事来说帮助很大。。里面包含 mysql的基本知识 还有优化 部分 存储过程 等 里面的语句都完全正确,全部在数据库中验证过
MySQL学习笔记,包括SQL基本语法、MySQL基础知识,包括存储引擎、索引、视图、锁、优化、存储结构等MySQL主要的内容。
数据库,简而言之可视为电子化的文件柜——存储电子文件...这里有我整理的一些关于数据库的笔记(MySQL),其中包括了DDL、DML、DQL、DCL等知识,内容相对基础,适合小白用于复习使用,或者参照数据库视频教学等学习。