首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MySQL存储过程-基础教程

2013-08-04 
MySQL存储过程--基础教程MySQL存储过程1.1???????? CREATE ?PROCEDURE ?(创建)CREATE PROCEDURE存储过程名

MySQL存储过程--基础教程

MySQL存储过程

1.1???????? CREATE ?PROCEDURE ?(创建)
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)

1.2???????? ALTER ?PROCEDURE
ALTER PROCEDURE?存储过程名SQL语句代码块
这个语句可以被用来改变一个存储程序的特征。

1.3???????? DROP ?PROCEDURE?(删除)

DROP?PROCEDURE ?IF ?EXISTS存储过程名

eg:DROP PROCEDURE IF EXISTS proc_employee (proc_employee

SHOW CREATE PROCEDURE?存储过程名

1.5???????? SHOW ?PROCEDURE ?STATUS

SHOW ?PROCEDURE ?STATUS

1.6???????? CALL语句(存储过程的调用)

CALL

[begin_label:] 
BEGIN
??? [statement_list]
END 
[end_label]

存储子程序可以使用BEGIN ... END复合语句来包含多个语句。

statement_list1.1????????????

DECLARE var_name[,...] type [DEFAULT value]
这个语句被用来声明局部变量。
要给变量提供一个默认值,请包含一个DEFAULT子句。
值可以被指定为一个表达式,不需要为一个常数。
如果没有DEFAULT子句,初始值为NULL
局部变量的作用范围在它被声明的BEGIN ... END块内。
它可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

1.2????????????

SET var_name = expr [, var_name = expr] 
在存储程序中的SET语句是一般SET语句的扩展版本。
被参考变量可能是子程序内声明的变量,或者是全局服务器变量。
在存储程序中的SET语句作为预先存在的SET语法的一部分来实现。这允许SET a=x, b=y, ...这样的扩展语法。
其中不同的变量类型(局域声明变量及全局和集体变量)可以被混合起来。
这也允许把局部变量和一些只对系统变量有意义的选项合并起来。

1.3????????????

SELECT col_name[,...] INTO var_name[,...] table_expr
这个SELECT语法把选定的列直接存储到变量。
因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。

重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。

1.10???? MySQLMySQL

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();

??????? }

??? }

1.13??????此文档中除MySQL?存储过程参数类型(in、out、inout)小节来自网上,其余均为本人原创,欢迎大家转载,如有不足,请指教。