对于存储过程,可以接收参数,其参数有三类:

#in          仅用于传入参数用
#out 仅用于返回值用
#inout 既可以传入又可以当作返回值

传入参数使用格式 in 变量 数据类型

返回值使用格式 out 变量 数量类型

类似于python的函数

要在类似于python的函数的传值,但传值格式不同

delimiter // # 设置mysql结束符合为//
create procedure p2(in n1 int,in n2 int,out res int) # 创建程序固定procedure 和p1是存储过程名字
BEGIN
select * from db2.teacher where tid >n1 and tid <n2 ; # sql语句
# 调用一个执行成功与否的返回值
set res = 1; # 设置一个变量返回值 为1 ;结束
end //
delimiter ;
#在mysql中调用

# 设置一个返回的初始值 初始值为0 如果sql语句执行完存储过程创建好后,返回值就为1
0代表假(执行失败),1代表真(执行成功)
 

set @x=0;
# 传参
@x的值 传给res
call p2(2,4,@x);

select * from db2.teacher where tid >2 and tid <4
mysql> set @x=0;
Query OK, 0 rows affected (0.07 sec) mysql> call p2(2,4,@x);
+-----+-----------------+
| tid | tname |
+-----+-----------------+
| 3 | 刘海燕老师 |
+-----+-----------------+
1 row in set (0.11 sec) Query OK, 0 rows affected (0.13 sec)

查看返回值 @x

mysql> select @x;
+------+
| @x |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
 
 在python中基于pymysql调用:

0 相当于 set @x=0 直接传0就可以了
callproc('p2',(2,4,0))
import pymysql

mysql_host = '192.168.0.108'
port = 3306
mysql_user = 'root'
mysql_pwd = ''
encoding = 'utf8' # 建立 连接mysql服务端 conn = pymysql.connect(
host=mysql_host, # mysql服务端ip
port=port, # mysql端口
user=mysql_user, # mysql 账号
password=mysql_pwd, # mysql服务端密码
db='db2', # 操作的库
charset=encoding # 读取字符串编码 ) # 拿到游标对象
cur = conn.cursor(pymysql.cursors.DictCursor) '''
游标是给mysql提交命令的接口
mysql>
把sql语句传递到这里
''' # 执行sql语句
cur.callproc('p2',(2,4,0))
# 打印查询结果
print(cur.fetchall()) # 执行完sql语句要关闭游标和mysql连接
cur.close()
conn.close() '''
[{'tid': 3, 'tname': '刘海燕老师'}]
'''

callproc()传参时候 涉及这几个参数

@_存储过程名字 _0 代表第一个参数 _1 第二个参数

@_p2_0=2,@_p2_1=4,@_p2_2=0

pymysql 查看返回值

用到 callproc传参的 @_p2_2

import pymysql

mysql_host = '192.168.0.108'
port = 3306
mysql_user = 'root'
mysql_pwd = ''
encoding = 'utf8' # 建立 连接mysql服务端 conn = pymysql.connect(
host=mysql_host, # mysql服务端ip
port=port, # mysql端口
user=mysql_user, # mysql 账号
password=mysql_pwd, # mysql服务端密码
db='db2', # 操作的库
charset=encoding # 读取字符串编码 ) # 拿到游标对象
cur = conn.cursor(pymysql.cursors.DictCursor) '''
游标是给mysql提交命令的接口
mysql>
把sql语句传递到这里
''' # 执行sql语句
cur.callproc('p2',(2,4,0))
# 打印查询结果
print(cur.fetchall()) # 查看返回值
cur.execute('select @_p2_2;')
# 打印查询结果
print(cur.fetchall()) # 执行完sql语句要关闭游标和mysql连接
cur.close()
conn.close() '''
[{'tid': 3, 'tname': '刘海燕老师'}]
[{'@_p2_2': 1}]
'''

mysql 内置功能 存储过程 创建有参存储过程的更多相关文章

  1. mysql 内置功能 存储过程 目录

    mysql 内置功能 存储过程介绍 mysql 内置功能 存储过程 创建无参存储过程 mysql 内置功能 存储过程 创建有参存储过程 mysql 内置功能 存储过程 删除存储过程

  2. mysql 内置功能 存储过程介绍

    存储过程介绍 就是mysql内置功能把逻辑写好 的功能给封装好,封装成一个接口名,把接口名丢给应用程序,应用程序直接调用接口名实现一系列增删改查功能 这个接口叫存储过程 基于存储过程封装成一个功能 存 ...

  3. mysql 内置功能目录

    mysql 内置功能 视图介绍 mysql 内置功能 视图 使用 mysql 内置功能 触发器介绍 mysql 内置功能 触发器 实验 mysql 内置功能 事务 介绍 mysql 内置功能 存储过程 ...

  4. MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能

    数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...

  5. mysql 内置功能 存储过程 创建无参存储过程

    操作哪个数据库,就把存储过程建到那个数据库 例如 现在use db2; 应该把存储过程 建立到db2数据库里 创建无参存储过程 delimiter // # 设置mysql结束符合为// create ...

  6. mysql六:mysql内置功能(视图、触发器、事务、存储过程、函数)

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 通过使用视图可以把查询过程中的 ...

  7. MySQL内置功能之视图、触发器和存储过程

    主要内容: 一.视图 二.触发器 三.存储过程 1️⃣  视图 一.关于视图的理解 1.1.何谓视图? 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名], 用户使 ...

  8. Mysql内置功能《四》存储过程

    存储过程 一 存储过程介绍 存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql 使用存储过程的优点: #1. 用于替代程序写的SQL语句,实 ...

  9. 数据库——mysql内置功能(11)

    1.视图 视图是一个虚拟表(非真实存在),其本质是(根据SQL语句获取动态的数据集,并未其命名),用户使用时只需使用(名称)即可获取结果集,可以将该结果集当做表来使用 使用视图我们可以把查询过程中的临 ...

随机推荐

  1. vue里面引入jq的方法

    1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jquery 打开package.json文件,在里面加入这行代码,jquery后面的是版本,根据你自己需求更改. dependenc ...

  2. vue的首页渲染了两次的原因以及解决方法

    现在在用vue做一些单页面应用的东西,遇到了些许问题啊,比如我再渲染首页的时候,会渲染两次,查看了一下原因,原来是在写路由的时候写的格式错了: 这样的时候,初始的时候就是加载的exam_list页面, ...

  3. Android——简单对话框实现

    点击一个Button,弹出一个简单的对话框: bn3.setOnClickListener(new View.OnClickListener() { public void onClick(View ...

  4. Android开发训练之第五章——Building Apps with Connectivity & the Cloud

    Building Apps with Connectivity & the Cloud These classes teach you how to connect your app to t ...

  5. Esper学习之十一:EPL语法(七)

    上一篇说到了EPL如何访问关系型数据库这种数据源,实际上别的数据源,比如:webservice.分布式缓存.非关系型数据库等等,Esper提供了统一的数据访问接口.然后今天会讲解如何创建另外一种事件类 ...

  6. 金蝶KIS问题解决汇总

    1.帐套结转时,提示t_subsys插入重复键 解决: I.删除索引  alter table t_subsys drop constraint pk_subsys  II.t_rp_initial表 ...

  7. 重载i++,++i操作符

    #include <iostream> using namespace std; class Time { public: Time(){min=;sec=;} Time(int m,in ...

  8. 题目1439:Least Common Multiple(求m个正数的最小公倍数lcm)

    题目链接:http://ac.jobdu.com/problem.php?pid=1439 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. 跟bWAPP学WEB安全(PHP代码)--OS命令注入

    背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...

  10. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验七:PS/2模块① — 键盘

    实验七:PS/2模块① — 键盘 实验七依然也是熟烂的PS/2键盘.相较<建模篇>的PS/2键盘实验,实验七实除了实现基本的驱动以外,我们还要深入解PS/2时序,还有PS/2键盘的行为.不 ...