/* 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 存储过程名(实参列表);
#二 :  删除存储过程
#语法:drop procedure 存储过程名 ,不支持删除多个
DROP PROCEDURE `myp1`; #三 : 查看 存储过程的信息
#错误写法:DESC myp2;
SHOW CREATE PROCEDURE myp2; #...................... #四: 修改 ,无法修改内部语句


*/

  #1.空参列表
#案例:插入到admin 表中五条记录
SELECT * FROM admin; DELIMITER $
CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(`username`,`password`)
VALUES('a1',''),('a2',''),('a3',''),('a4',''),('a5','');
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','') $; #返回1
#call myp3('lyt','') $; #返回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','') $; #返回 '失败'
# CALL myp4('lyt','') $; #返回 '成功' #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;
#二 :  删除存储过程
#语法:drop procedure 存储过程名 ,不支持删除多个
DROP PROCEDURE `myp1`; #三 : 查看 存储过程的信息
#错误写法:DESC myp2;
SHOW CREATE PROCEDURE myp2; #...................... #四: 修改 ,无法修改内部语句
#------------------------------------------
COMMIT;

#五: 练习1-:

    ##练习1
#test1 : 创建一个存储过程实现传入一个日期,格式化为xx年xx月xx日 并返回
DELIMITER $
CREATE PROCEDURE test_pro4(IN mydate DATETIME,OUT strDate VARCHAR(50))
BEGIN
SELECT DATE_FORMAT(mydate,'%y年%m月%d日') INTO strDate;
END $ CALL test_pro4(@mydate,@strDate) $; SET @mydate=NOW();
SET @strDate='';
SELECT @mydate,@strDate; #2018-11-01 17:01:41,18年11月01日 ##练习2
#test2 : 创建一个存储过程或者函数实现传入女神名称,返回 女神 and 男神 名字加在一块的字符串
#如传入:小昭 ;返回:小昭 and 张无忌
COMMIT;
DROP PROCEDURE test_pro6; DELIMITER $
CREATE PROCEDURE test_pro7(IN s1 VARCHAR(50),OUT s2 VARCHAR(50))
BEGIN
SELECT CONCAT(s1,' and ',IFNULL(boys.`boyName`),'null')
FROM boys
INNER JOIN beauty b
ON b.`boyfriend_id`=boys.`id`
WHERE b.name=s1;
END $
#set @result1='' 可以省略!! CALL test_pro7('热巴',@result1) $ #返回 : 热巴 and 鹿晗
SELECT @result1; #六: 创建存储过程或者函数 ,根据传入的目录条数和起始索引(反了!),查询beauty表的记录
DELIMITER $
CREATE PROCEDURE test_pro8(IN size INT,IN startIndex INT)
BEGIN
SELECT * FROM beauty
LIMIT startIndex,size;
END $ CALL test_pro8(3,5) $

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

  1. mysql进阶之存储过程

    往往看别人的代码会有这样的感慨: 看不懂 理还乱 是离愁 别是一番滋味在心头 为什么要使用存储过程? 在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定 ...

  2. MySQL进阶2 sql选择语句 where

    与SQL语句一致 #进阶2: 条件查询 /* 语法 select 查询列表 #3 from 表名 #1 where 筛选条件; #2 分类: 1.按条件表达式进行筛选 > < = != & ...

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

    SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm ...

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

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

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

    一个.概要 在实际的软件开发项目.我们经常会遇到需要创造更多的相同类型的数据库表或存储过程时,.例如.假设按照尾号点表的ID号,然后,你需要创建10用户信息表,的用户信息放在同一个表中. 对于类型同样 ...

  6. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  7. MySQL函数及存储过程

    MySQL函数及存储过程 参考文章:https://www.cnblogs.com/wupeiqi/articles/5713323.html 1.函数 1.1内置函数 官方文档:https://de ...

  8. MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

    /*MySQL进阶19 函数 存储过程和函数:都类似于java中的方法; 存储过程和函数通用好处: 1.提高代码的重用性 2.简化操作 好处: 减少操作次数,减少了编译次数,减少了和服务器的连接次数, ...

  9. mysql 内置功能 存储过程 创建有参存储过程

    对于存储过程,可以接收参数,其参数有三类: #in 仅用于传入参数用 #out 仅用于返回值用 #inout 既可以传入又可以当作返回值 传入参数使用格式 in 变量 数据类型 返回值使用格式 out ...

随机推荐

  1. Python 的包管理工具 distribute, setuptools, easy_install命令与 pip命令

    Setuptools 是 Python Enterprise Application Kit (PEAK)的一个副项目,它是 Python 的disutils工具的增强工具,可以让程序员更方便地创建和 ...

  2. Django:将后台返回的数据填充到select下拉框中

    select选择框如下: <select data-placeholder="选择项目..." class="form-control" name=&qu ...

  3. linux 使用jar 打包成war

    把当前目录下的所有文件打包成game.war jar -cvfM0 game.war ./ -c   创建war包 -v   显示过程信息 -f     -M -0   这个是阿拉伯数字,只打包不压缩 ...

  4. 【Chrome插件】右键搜--多站点搜索

    写在前面:看文章前请先看文章写作时间,避免浪费时间.2019-09-10 使用场景 一次输入,同时在多个网站进行内容搜索,比如一键在不同网站搜索电影.一键获取多个搜索引擎的搜索结果. 操作演示 评分 ...

  5. 第八章 跨语言服务治理方案 Service Mesh

    8.1 Service Mesh 概述 新兴的下一代微服务架构,被称为下一代微服务,同时也是云原生技术栈的代表技术之一. 8.1.1 Service Mesh的由来 从2016年到2018年,serv ...

  6. 【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法

    光照模型(Shading Model)在很多论文中得到了广泛的应用,如robust and illumination invariant change detection based on linea ...

  7. Appium移动自动化测试-----(六)3.AppiumDesktop功能描述

    一般功能 这些能力跨越多个驱动因素. 能力 描述 值 automationName 使用哪个自动化引擎 Appium(默认)或Selendroid或者UiAutomator2或者Espresso对于A ...

  8. jira7.3.6 linux安装及破解

    一.环境准备 jira7.3的运行是依赖java环境的,也就是说需要安装jdk并且要是1.8以上版本,如下: http://www.oracle.com/technetwork/java/javase ...

  9. java后端通过request对象获取请求的ip地址工具类

    package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServl ...

  10. linux定时任务每隔5分钟向文本追加一行

    编写shell脚本 test.sh内容如下,上传到linux的root目录 更改文件权限 chmod  777   test.sh 编辑定时任务 crontab  -e */5    *  *  *  ...