`

MySql存储过程学习笔记

 
阅读更多

 

# 对于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视图及存储过程学习笔记

    MySQL视图及存储过程学习笔记

    Mysql存储过程学习笔记–建立简单的存储过程

    一、存储过程  存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户 通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。而...

    Mysql存储过程学习笔记--建立简单的存储过程

    我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该...

    MySQL核心技术学习笔记

    MySQL核心技术学习笔记,包括从MySQL产品的安装到DQL语言的学习、DML语言的学习、DDL语言的学习、TCL语言的学习、视图、存储过程等,以及相关案例实现语句等等。

    MySQL5学习笔记

    MySQL存储过程之java调用 9 MySQL存储过程实现动态查询 12 MySQL应用总结 12 MySQL数据管理 15 数据管理 15 MySQL数据导出 15 MySQL数据还原 15 MySQL灾难性复制恢复总结 16 MySQL授权管理 17 未解决及已解决问题 19...

    非常详细的某培训机构mysql学习笔记

    非常详细的某培训机构mysql学习笔记,内容系统全面,实用性强 MySQL1 MySQL基础 MySQ单实例部署 MySQL多实例部署 MySQL数据库操作 MySQL数据类型 MySQL存储引擎 MySQL表操作 MySQL2 MySQL数据操作 MySQL单...

    MySQL学习笔记(含基础、运维、进阶三部分)

    MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中的笔记和资源,从入门到进阶的内容都有涉及。通过...

    mysql学习笔记和案例(完全版)

    这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型,标识列,级联删除...

    mysql学习笔记和案例(全部知识点版)

    这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知识点,查询,子查询,分组,排序,常用函数,多表连接,视图,变量,存储过程,函数,分支结构,循环结构等等

    MySQL5.5学习笔记

    MySQL5.5学习笔记,里边是MySQL基础知识,包括对数据库,数据表,视图,数据类型和运算符,MySQL函数,存储过程和函数,以及对数据的增删改查等知识,还有MySQL用户管理以及数据备份与还原的知识!适合初学者学习~

    MySQL学习笔记2-高级查询与存储.md

    然后重点讲解了MySQL存储过程的创建、调用、参数、条件和循环语句等知识,同时提供了详细的代码示例进行解释说明,内容系统全面。 适合人群: 需要掌握MySQL高级应用的数据库学习者。文中具体的代码示例可助力开发。 ...

    MySQL学习笔记-基础到进阶

    内容概要:MySQL学习笔记,内容包括SQL基本语法、MySQL基础知识,包括存储引擎、索引、视图、锁、优化、存储结构等MySQL主要的内容。 适用人群:适合自学MySQL的同学使用。 能学到什么:MySQL从基础到进阶的全部内容...

    mysql学习笔记和案例(完全版)2019_10_17.zip

    这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知 识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型, 标识列,级联...

    mysql学习笔记和案例(完全版)2019_10_21.zip

    这是我自己学习mysql时的学习笔记,每一个知识点都是自己动手写的,涵盖了mysql中的几乎全部的基础知 识点,查询,子查询,分组,排序,常用函数,多表连接,视图,约束,分页,建库建表,数据类型, 标识列,级联...

    MySQL5.7学习笔记 完整版PDF

    《MySQL5.7学习笔记》将从MySQL5.7的安装、配置、使用等方面进行详细介绍,帮助读者快速掌握MySQL5.7的使用技巧。首先,我们将介绍MySQL5.7的安装方法,包括Windows和Linux平台的安装步骤。然后,我们将讲解MySQL5.7...

    MySQL学习笔记MySQL学习笔记

    数据的重要性也就在一定程度上影射了数据库的重要性,因为数据领域的最重要的安全问题、存储问题、关系问题等,很多方面的整合都需要依靠数据库来完成。 举个例子,现在有很多数据分析师,他们每天最基本的工作往往...

    mysql学习笔记和案例(完全版)2019_10_16.zip

    这是我学习mysql数据库的时候做的学习笔记,增删查改,视图,自定义函数,自定义存储过程,触发器,索引,sql编程等等。

    mysql 学习笔记 绝对原创 包含工作中常用的语句 存储过程 函数 触发器等

    个人原创,根据自己的工作总结的,对工作的人事来说帮助很大。。里面包含 mysql的基本知识 还有优化 部分 存储过程 等 里面的语句都完全正确,全部在数据库中验证过

    MySQL学习笔记,包括SQL基本语法、MySQL基础知识,包括存储引擎、索引、视图、锁、优化、存储结构等MySQL主要的内容

    MySQL学习笔记,包括SQL基本语法、MySQL基础知识,包括存储引擎、索引、视图、锁、优化、存储结构等MySQL主要的内容。

    MySQL笔记整理.doc

    数据库,简而言之可视为电子化的文件柜——存储电子文件...这里有我整理的一些关于数据库的笔记(MySQL),其中包括了DDL、DML、DQL、DCL等知识,内容相对基础,适合小白用于复习使用,或者参照数据库视频教学等学习。

Global site tag (gtag.js) - Google Analytics