一、in、out、inout

1、in:传入参数,在存储过程外部无法使用(如i1),

2、out:导入变量,在存储过程外的赋值无法导入存储过程(如p1),在存储过程内重新被赋值(如r1),

3、inout:兼具in和out的作用,可将存储过程外部的赋值带入存储过程内,重新设置后传出,

-- 创建存储过程
delimiter $$
drop procedure if EXISTS proc_p1 $$ 
create procedure proc_p1(in i1 int,inout ir1 int,out r1 int,out p1 int)
begin
    declare d2 int default 3;
    set p1=p1;
    set ir1=ir1+10;
    if i1=1 then
        set r1=100+d2;
    elseif i1=2 then
        set r1=1000+d2;
    else
        set r1=d2;
    end if;
end $$
delimiter ;

-- 调用存储过程
set @o=10;
set @u=10;
set @p=10;
call proc_p1(4,@o,@u,@p);
select @o,@u,@p;
in、inout、out

二、存储过程在pymysql中的使用

import pymysql
conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='',db='chouti',charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 1、调用存储过程
cursor.callproc('proc_p1',(4,3,2,1))
# 2、获取存储过程中的select结果
ret_select = cursor.fetchall()
print(ret_select)
# 3、获取存储过程的返回值
cursor.execute('select @_proc_p1_0,@_proc_p1_1,@_proc_p1_2,@_proc_p1_3')
# 4、查看存储过程的返回值
ret_arges = cursor.fetchall()
print(ret_arges)

conn.commit()
cursor.close()
conn.close()
procedure_demo

 

注意:查看存储过程的返回值时的参数格式为:@_存储过程名_参数位置,

三、存储过程中的赋值into