MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'

/* MySQL-进阶18 存储过程 和 函数
      存储过程和函数:类似于java中的方法
   好处:
    1.提高代码的重用性
    2.简化操作

*/
#存储过程
/*
    含义: 一组已经预见编译好的SQL语句的集合, 理解成批处理语句;
    好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数,提高了效率

*/
/*
#一: 创建语句
create procedure 存储过程名(参数列表)
begin
    存储过程体(一组合法的SQL语法)
end

注意:
1.参数列表包含三个部分 : 参数模式 参数名 参数类型
举例:
in stuname varchar(20)

参数模式:
in : 该参数可以作为输入, 也就是该参数需要调用方 传入值
out : 该参数可以作为输出,也就是该参数可以作为返回值
inout : 该参数既可以作为输入也可以作为输出,也就是该参数既需要传入值,又需要返回值

2.如果存储过程体只有一句话,begin 和 end 可以省略;
    存储过程体中的每条sql 语句的结尾要求必须加分号;
    存储过程的结尾可以使用 delimiter 重新设置;
    语法:
        delimiter 结束标记
    案例:
        delimiter $
#二:调用语法
    call 存储过程名(实参列表);
*/

  #1.空参列表
    #案例:插入到admin 表中五条记录
SELECT * FROM admin;

DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
  INSERT INTO admin(`username`,`password`)
  VALUES(‘a1‘,‘1111‘),(‘a2‘,‘2222‘),(‘a3‘,‘33333‘),(‘a4‘,‘444444‘),(‘a5‘,‘5555‘);
  END $

    #调用
CALL myp1() $;

  #2:创建带有in 模式参数的存储过程
     #案例 : 创建存储过程实现 根据女生名,查询对应的男生信息
DELIMITER $
CREATE PROCEDURE myp2(IN beautyName VARCHAR(50))
BEGIN
  SELECT bo.*
  FROM boys bo
  RIGHT JOIN beauty b
  ON bo.id = b.boyfriend_id
  WHERE b.name = beautyName;
END $
    #调用 ,必须紧紧挨着‘END $‘
CALL myp2(‘柳岩‘) $;

   #案例2: 创建存储过程实现,用户是否登录成功
DELIMITER $
CREATE PROCEDURE myp3(IN `uname` VARCHAR(10),IN psw VARCHAR(10))
BEGIN
    DECLARE result VARCHAR(20) DEFAULT ‘‘; #声明局部变量并进行初始化
    SELECT COUNT(*) INTO result  #赋值
    FROM admin
    WHERE username = uname AND admin.`password`=psw;

    SELECT result;
END $
CALL    myp3(‘lyt‘,‘6666‘) $;   #返回1
#call    myp3(‘lyt‘,‘66066‘) $;  #返回0

    #3-2:(使用IF 语句)创建存储过程实现,用户是否登录成功
DELIMITER $
CREATE PROCEDURE myp4(IN `uname` VARCHAR(10),IN psw VARCHAR(10))
BEGIN
    DECLARE result INT DEFAULT 0; #声明局部变量并进行初始化
    SELECT COUNT(*) INTO result  #利用into 赋值
    FROM admin
    WHERE username = uname AND admin.`password`=psw;

    SELECT IF(result>0,‘成功‘,‘失败‘); #使用
END $
CALL    myp4(‘lyt‘,‘66066‘) $;  #返回 ‘失败‘
# CALL    myp4(‘lyt‘,‘6666‘) $;  #返回 ‘成功‘

#3:创建带有out 模式参数的存储过程
    #案例1:根据女神名,返回对应的男神名
DELIMITER $
CREATE PROCEDURE myp5(IN in_name VARCHAR(50),OUT boyName VARCHAR(20))
BEGIN
    SELECT bo.boyName INTO boyName  #赋值,重名时按照就近原则
    FROM boys bo
    INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
    WHERE b.name = in_name;
END $
    #set @bname $  ,定义一个用户变量
CALL myp5(‘柳岩‘,@bname) $
SELECT @bname $;           #鹿晗

    #案例2:根据女神名,返回对应的男神名 和男神魅力值
DELIMITER $
CREATE PROCEDURE myp6(IN in_name VARCHAR(50),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
    SELECT bo.boyName ,bo.userCP INTO boyName,userCP
        FROM boys bo
    INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
    WHERE b.name = in_name;
END $
    #set @bname $   ,定义一个用户变量
CALL myp6(‘柳岩‘,@bname,@usercp) $
SELECT @bname,@usercp $;           #鹿晗 ,800

##4.创建带inout 模式参数的存储过程
    #案例1: 传入a 和 b两个值,最终a和b都翻倍并返回; 注意需要传入的需要是用户变量
DELIMITER $
CREATE PROCEDURE myp7(INOUT a INT,INOUT b INT )
BEGIN
    SET a=a+a;
    SET b=b+b;
END $  

CALL myp7(@a,@b) $
SELECT @a,@b ;  #24 26

SET @a=12;
SET @b=13;

MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'

原文地址:https://www.cnblogs.com/zhazhaacmer/p/9890003.html

时间: 2024-10-21 06:22:46

MySQL-进阶18 存储过程- 创建语句-参数模式(in/out/inout-对应三个例子) -调用语法-delimiter 结束标记'$'的相关文章

mysql进阶 十九 SQL语句如何精准查找某一时间段的数据

SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm_bill where tx_time Between '2015-12-20' And '2015-12-31'; 仔细研究还是能够发现一些细节性的问题的. SQL语句1 SELECT * FROM lmapp.lm_bill where merch_uid='S18853883587' AND 

基于ORACLE建表和循环回路来创建数据库存储过程SQL语句来实现

一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样的多个表,我们能够逐个建立,也能够採用循环的方法来建立.与之相相应的,能够用一个存储过程实现对全部表的操作.也能够循环建立存储过程,每一个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表.每一个表中包括员工工号(8位)和年龄字段,以工号的最后一位来分表.同一时候,我们建立存储过程实

查询所有表名、字段名、类型、长度 和 存储过程、视图 的创建语句

-- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.id where xtype ='p' order by o.xtype,o.name,cm.text -- 获得视图程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i

关于mysql存储过程创建动态表名及参数处理

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线,操作记录就超过13万条,决定拆表,按照日期来保存日志,每天的日志存到一个表里面,然后定期把老的数据导出来备份后删掉. 具体思路是写日志的时候,根据当前的时间决定插入到当天的表里面,如表不存在则创建一个新的表,表名里面带上当天的日期.这就涉及到需要在存储过程里面动态创建一个跟日期相关的表.mysql不

MySQL之存储过程创建和调用

一.MySQL存储过程_创建-调用 1.1存储过程:SQL中的"脚本"1.创建存储过程2.调用存储过程3.存储过程体4.语句标签块 二.MySQL存储过程简单介绍: 存储过程(Stored Procedure):提示:#SQL语句:先编译后执行 一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行. 优点(为什么要用存储过程?): ①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调

调用MySql 分页存储过程带有输入输出参数

1 Create PROCEDURE getuser 2 ( 3 IN pageIndex INT, 4 IN pageSize INT, 5 OUT count INT 6 ) 7 8 BEGIN 9 declare pindex int DEFAULT (pageIndex-1)*pageSize; 10 11 select * from lc_user order by id LImit pindex,pageSize; 12 13 SELECT COUNT(id) INTO count

MySQL 存储过程CASE语句用法

MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句.下面讲讲MySQL 存储过程CASE语句用法. 1,CASE语法结构 CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE; 2,CASE应用实例 DELIMITER

mysql实现oracle存储过程默认参数

我们都知道oracle存储过程支持为参数设置默认值,这样即使存储过程升级,原来的调用也可以不受影响.但是mysql不支持,mariadb也没有支持(截止10.4也是如此).但是这一限制会导致升级麻烦重重.虽然如此,我们可以通过mysql 5.7/mariadb 10.2引入的json类型来变通实现.如下所示: drop function number_stats; CREATE FUNCTION number_stats(in_numbers JSON) RETURNS INTEGER NOT

初识 MySQL 5.6 新功能、参数

摘要: 继上一篇的文章 初识 MySQL 5.5 新功能.参数 之后,现在MySQL5.6 针对 MySQL5.5 各个方面又提升了很多,特别在性能和一些新参数上面,现在看看大致提升了哪些方面(后续不定时更新). 一:性能.功能上的提升. ① 在线DDL即 online DDL,日常的增删字段和索引都不会出现问题,但还是有很多操作不支持完全的在线DDL,包括增加一个全文索引,修改列的数据类型,删除一个主键,修改表的字符集等,其中主键可以通过自己指定的方式进行操作,操作方式有2种:algorith