Mysql存储过程(带输入输出参数的测试)--变量,参数,注释变量定义:DECLAREvariable_name[,variable_name...]datatype[DEFAULTvalue];其中,datatype为mysql的数据类型,如:INT,FLOAT,DATE,VARCHAR(length)例:DECLAREl_intINTunsigneddefault4000000;DECLAREl_numericNUMERIC(8,2)DEFAULT9.95;DECLAREl_dateDATEDEFAULT'1999-12-31';DECLAREl_datetimeDATETIMEDEFAULT'1999-12-3123:59:59';DECLAREl_varcharVARCHAR(255)DEFAULT'Thiswillnotbepadded';变量赋值SET变量名=表达式值[,variable_name=expression...]参数mysql存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUTCreateprocedure|function([[IN|OUT|INOUT]参数名数据类形...])IN输入参数表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OUT输出参数该值可在存储过程内部被改变,并可返回INOUT输入输出参数调用时指定,并且可被改变和返回IN参数例子:创建mysqlCREATEPROCEDUREsp_demo_in_parameter(INp_inINT)mysqlBEGINSELECTp_in;/*查询输入参数*/mysqlSETp_in=2;/*修改*/mysqselectp_in;/*查看修改后的值*/mysqlEND;执行结果:mysqlset@p_in=1;mysqlcallsp_demo_in_parameter(@p_in);+------+|p_in|+------+|1|+------++------+|p_in|+------+|2|+------+mysqlselect@p_in;+-------+|@p_in|+-------+|1|+-------+以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值OUT参数例子创建:mysqlCREATEPROCEDUREsp_demo_out_parameter(OUTp_outINT)mysqlBEGINSELECTp_out;/*查看输出参数*/mysqlSETp_out=2;/*修改参数值*/mysqlSELECTp_out;/*看看有否变化*/mysqlEND;执行结果:mysqlSET@p_out=1;mysqlCALLsp_demo_out_parameter(@p_out);+-------+|p_out|+-------+|NULL|+-------+/*未被定义,返回NULL*/+-------+|p_out|+-------+|2|+-------+mysqlSELECT@p_out;+-------+|p_out|+-------+|2|+----------+INOUT参数例子:mysqlCREATEPROCEDUREsp_demo_inout_parameter(INOUTp_inoutINT)mysqlBEGINSELECTp_inout;mysqlSETp_inout=2;mysqlSELECTp_inout;END;执行结果:set@p_inout=1callsp_demo_inout_parameter(@p_inout)//+---------+|p_inout|+---------+|1|+---------++---------+|p_inout|+---------+|2|+---------+select@p_inout;+----------+|@p_inout|+----------+|2|+----------+用户变量1、在mysql客户端使用用户变量mysqlSELECT'HelloWorld'into@x;mysqlSELECT@x;+-------------+|@x|+-------------+|HelloWorld|+-------------+mysqlSET@y='GoodbyeCruelWorld';mysqlselect@y;+---------------------+|@y|+---------------------+|GoodbyeCruelWorld|+---------------------+mysqlSET@z=1+2+3;mysqlselect@z;+------+|@z|+------+|6|+------+2、在存储过程中使用用户变量mysqlCREATEPROCEDUREGreetWorld()SELECTCONCAT(@greeting,'World');mysqlSET@greeting='Hello';mysqlCALLGreetWorld();+----------------------------+|CONCAT(@greeting,'World')|+----------------------------+|HelloWorld|+----------------------------+3、在存储过程间传递全局范围的用户变量mysqlCREATEPROCEDUREp1()SET@last_procedure='p1';mysqlCREATEPROCEDUREp2()SELECTCONCAT('Lastprocedurewas',@last_procedure);mysqlCALLp1();mysqlCALLp2();+-----------------------------------------------+|CONCAT('Lastprocedurewas',@last_procedure)|+-----------------------------------------------+|Lastprocedurewasp1|+-----------------------------------------------+注意:①用户变量名一般以@开头②滥用用户变量会导致程序难以理解及管理注释mysql存储过程可使用两种风格的注释双模杠:--该风格一般用于单行注释c风格:/*注释内容*/一般用于多行注释