MySQL存储过程--基础教程
MySQL存储过程
CREATE PROCEDURE存储过程名 (参数列表)
???BEGIN
???????? SQL语句代码块
END
注意:
由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT
在mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。
当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,因为那是MySQL的转义字符。
如:
mysql> delimiter //
mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
??? -> BEGIN
??? ->?? SELECT COUNT(*) INTO param1 FROM t;
??? -> END
??? -> //
Query OK, 0 rows affected (0.00 sec)
ALTER PROCEDURE?存储过程名SQL语句代码块
这个语句可以被用来改变一个存储程序的特征。
DROP?PROCEDURE ?IF ?EXISTS存储过程名
eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee SHOW ?PROCEDURE ?STATUS CALL 存储子程序可以使用BEGIN ... END复合语句来包含多个语句。 statement_list1.1???????????? 1.2???????????? 1.3???????????? 重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。 MySQLMySQL MySQLMySQL MySQL总结 如果仅仅想把数据传给1.1??????????? --删除存储过程 DROP PROCEDURE IF EXISTS proc_employee_getCount --创建存储过程 CREATE PROCEDURE proc_employee_getCount(out n int) BEGIN ???? SELECT COUNT(*) FROM employee ; END --MYSQL调用存储过程 CALL proc_employee_getCount(@n); 带输入参数的存储过程: --删除存储过程 DROP PROCEDURE IF EXISTS proc_employee_findById; --创建存储过程 CREATE PROCEDURE proc_employee_findById(in n int) BEGIN ???? SELECT * FROM employee where id=n; END --定义变量 SET @n=1; --调用存储过程 CALL proc_employee_findById(@n); 操作存储过程时应注意: 1.?????????2.?????????3.?????????SET @变量名=初始值; 4.????????? publicvoid??? { ????????????????????????????? ?*callableStatementjava.sql.CallableStatement ??????????? ?*connectionjava.sql.Connection ??????????? ?*jdbc调用存储过程原型 ??????????? ?*{call存储过程名(参数列表1,参数列表2)}可用?代替 ??????????? ?*/ ??????????????????????????????????????????????????????? { ??????????? ??? System.out.println(resultSet.getInt(1)+""t"+resultSet.getString(2)); ??????????? } ??????? }??????????? e.printStackTrace(); ??????? } ??? }?? Java代码调用带输出参数的存储过程 publicvoid??? { ????????????????????????????? ?*callableStatementjava.sql.CallableStatement ??????????? ?*connectionjava.sql.Connection ??????????? ?*jdbc调用存储过程原型 ??????????? ?*{call存储过程名(参数列表1,参数列表2)}可用?代替 ??????????? ?*/ ????????????????????????????????????????????????????????????????????????????? { ??? ??????????? System.out.println(resultSet.getInt(1)); ??????????? } ??????? }??????????? e.printStackTrace(); ??????? } ??? }SHOW CREATE PROCEDURE?存储过程名
1.5???????? SHOW ?PROCEDURE ?STATUS
1.6???????? CALL语句(存储过程的调用)
[begin_label:]
BEGIN
??? [statement_list]
END
[end_label]
DECLARE var_name[,...] type [DEFAULT value]
这个语句被用来声明局部变量。
要给变量提供一个默认值,请包含一个DEFAULT子句。
值可以被指定为一个表达式,不需要为一个常数。
如果没有DEFAULT子句,初始值为NULL。
局部变量的作用范围在它被声明的BEGIN ... END块内。
它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。
SET var_name = expr [, var_name = expr]
在存储程序中的SET语句是一般SET语句的扩展版本。
被参考变量可能是子程序内声明的变量,或者是全局服务器变量。
在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, ...这样的扩展语法。
其中不同的变量类型(局域声明变量及全局和集体变量)可以被混合起来。
这也允许把局部变量和一些只对系统变量有意义的选项合并起来。
SELECT col_name[,...] INTO var_name[,...] table_expr
这个SELECT语法把选定的列直接存储到变量。
因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。
1.10???? MySQLMySQL
1.13??????此文档中除MySQL?存储过程参数类型(in、out、inout)小节来自网上,其余均为本人原创,欢迎大家转载,如有不足,请指教。