mysql_存储过程
来源:互联网 发布:java抓取网页数据 编辑:程序博客网 时间:2024/06/06 17:21
一、存储过程:存储过程就是带有逻辑性的sql语句;
之前的SQL语句是没有条件判断,没有循环。
存储过程是有流程控制语句:IF语句、WHILE语句
存储过程的特点:
1.执行效率比较高 并且存储过程是在数据库的服务器放进行执行
2.缺点:移植性比较差,不同的数据库服务器之间的存储过程不能相互进行转移
二、定义存储过程
-- 查询所有的员工信息
DELIMITER $ -- 声明存储过的结束符
CREATE PROCEDURE pro_test1() -- pro_test1 代表的是存储过程名
BEGIN
SELECT * FROM emp ;-- sql语句 +流程控制语句
END $;
三、调用存储过程
CALL 存储过程名;
四、参数
IN::表示的是输入参数,可以携带数据进入到存储过程。
OUT:表示的书输出参数,可以从存储过程中进行返回结果。
INOUT:既表示输入也表示输出,既有输入的功能也有输出的功能。
五、Mysql服务器中的变量
存储过程是如何接受返回值?
mysql服务器当中变量分为三类
1.全局变量:(又称内置变量) mysql数据库内置的变量
查看所有的全局变量:SHOW VARIABLES;
部分变量的问题:
character_set_client:mysql服务器端接收数据的编码
character_set_results:mysl服务器输出数据的编码
-- 修改全局变量的值
SET 变量名=新值;
-- 查看某一个全局变量的值
SELECT @@变量名
SELECT @@character_set_client;
2.局部变量:定义在一个存储过程当中的变量,局部变量的使用范围只在当前的存储过程
当中。
3.会话变量:值存在于当前的客户端与数据服务端之间的一次连接当中,如果断开连接,
这会话变量数据全部丢失。
①定义会话变量
SET @变量名=值;
②查询会话变量
SELECT @变量名;
六、例子
CREATE TABLE emp(
id INT PRIMARY KEY,
NAME VARCHAR(20),
sex VARCHAR (2)
);
INSERT INTO emp (id,NAME,sex) VALUES(1,'张三1','男1');
INSERT INTO emp (id,NAME,sex) VALUES(2,'张三2','男2');
INSERT INTO emp (id,NAME,sex) VALUES(3,'张三3','男3');
INSERT INTO emp (id,NAME,sex) VALUES(4,'张三4','男4');
SELECT * FROM emp;
-- 1.定义一个存储过程:查询所有的员工信息
DELIMITER $
CREATE PROCEDURE pro_test1()
BEGIN
SELECT * FROM emp;
END $;
-- 执行存储过程
CALL 存储过程名;
CALL pro_test1();
-- 2.定义一个带有输入的存储过程:查询id为多少的员工信息
DELIMITER $
CREATE PROCEDURE pro_test2(IN eid INT)
BEGIN
SELECT * FROM emp WHERE id=eid;
END $;
-- 执行存储过程
CALL pro_test2(2);
-- 3.定义一个带有输出的存储过程
DELIMITER $
CREATE PROCEDURE pro_test3(OUT str VARCHAR(20))
BEGIN
SET str='你好,欢迎来到石家庄';
END $;
-- 执行存储过程,定义会话变量
-- 方法一
SET @a=1;
CALL pro_test3(@a);
SELECT @a;
-- 方法二
CALL pro_test3(@aa);
SELECT @aa;
-- 4.带有输入和输出参数的存储过程
DELIMITER $
CREATE PROCEDURE por_test4(INOUT i INT)
BEGIN
SELECT i;
SET i=500;
END $
SET @n=10;
CALL por_test4(@n);
SELECT @n;
-- 5.根据员工编号 查询员工的姓名
-- 第一种方式
DELIMITER $
CREATE PROCEDURE pro_test5(IN eid INT,OUT str VARCHAR(20))
BEGIN
-- 用关键字INTO将查询结果name赋给变量str
SELECT NAME INTO str FROM emp WHERE id=eid;
END $;
SELECT * FROM emp;
CALL pro_test5(1,@na);
SELECT @na;
-- 第二种方式
DELIMITER $
CREATE PROCEDURE pro_test6(IN eid INT,OUT str VARCHAR(20))
BEGIN
SELECT NAME INTO str FROM emp WHERE id=eid;
SELECT str;
END $;
SELECT * FROM emp;
CALL pro_test6(1,@na);
-- 6.带有逻辑的存储过程
-- 输出一个数字,判断判断你输入的数字是礼拜几
DELIMITER $
CREATE PROCEDURE pro_test7(IN num INT, OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str='今天是礼拜一';
ELSEIF num=2 THEN
SET str='今天是礼拜二';
ELSEIF num=3 THEN
SET str='礼拜三';
ELSE
SET str='你输入的有无';
END IF;
END $;
-- 执行sql语句
CALL pro_test7(1,@st);
SELECT @st;
-- 7.while 带有循环的存储过程
-- 输出一个整数 然后计算从0到这个整数之间所有整数的和 100 统计 0-100之间和
DELIMITER $
CREATE PROCEDURE pro_test8(IN num INT, OUT result INT)
BEGIN
-- 定义语句变量
DECLARE i INT DEFAULT 0; -- 定义一个参考量
DECLARE sum1 INT DEFAULT 0;-- 用来接收每一个数的和、
WHILE i<=num DO
SET sum1=sum1+i;
SET i=i+1;
END WHILE;
-- 给result进行赋值
SET result=sum1;
END $;
CALL pro_test8(10,@n);
SELECT @n;
- mysql_存储过程
- mysql_存储过程
- 深入浅出mysql_存储过程
- 深入浅出mysql_存储引擎
- MySQL_面向过程访问.php
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- 存储过程
- c/c++整理--c++面向对象(1)
- InvalidateRect,invalidate,updatewindow区别(转)
- 面试心得 --- 小米大数据开发
- mysql入门(约束二十一)
- Git初步探索 -- 基于linux平台
- mysql_存储过程
- Hibernate中的一级缓存、二级缓存和懒加载
- JAVA--IO流(二)
- 分页存储过程
- 『ORACLE』 PLSQL静态游标的使用(11g)
- 3549 Flow Problem(入门) [最大流]
- Android 绿色应用公约
- 【设计模式】—— 创建者模式Builder
- 『ORACLE』 查看主键(11g)