zoukankan      html  css  js  c++  java
  • mysql 内置功能 存储过程 创建有参存储过程

    对于存储过程,可以接收参数,其参数有三类:
    
    #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 = '123'
    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 = '123'
    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}]
    '''
  • 相关阅读:
    JZOJ5954.【NOIP2018模拟11.5A组】走向巅峰
    JZOJ5956.【NOIP2018模拟11.7A组】easy LCA
    JZOJ5957.【NOIP2018模拟11.7A组】scarborough fair
    JZOJ5959【NOIP2018模拟11.8A组】铁路运输
    NOIP2018游记
    Pycharm 解释器的快捷键
    计算机编程语言初识
    计算机初识
    Python之如何修改运行的快捷键
    [USACO09NOV]硬币的游戏A Coin Game
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/9946688.html
Copyright © 2011-2022 走看看