JSP  创建存储过程
MySQL存储过程是从 MySQL 5.0 开始逐渐增加新的功能。在MySQL中 ,可以使用T-SQL语句CREATE PROCEDURE来创建存储过程。在创建存储过程时,应该指定所有的输入参数、执行数据库操作的编程语句、返回至调用过程或批处理时以示成功或失败的状态值、捕获和处理潜在错误时的错误处理语句等。
1.创建存储过程的规则
在设计和创建存储过程时,应该满足一定的约束和规则。只有满足了这些约束和规则才能创建有效的存储过程。
CREATE PROCEDURE 定义自身可以包括任意数量和类型的SQL语句,但表10-3中的语句除外。因为不能在存储过程的任何位置使用这些语句。
表10-3  CREATE PROCEDURE 定义中不能出现的语句
名称
名称
CREATE AGGREGATE
mysql存储过程使用
CREATE RULE
CREATE DEFAULT
CREATE SCHEMA
CREATEALTER FUNCTION
CREATEALTER TRIGGER
CREATEALTER PROCEDURE
CREATE.ALTER VIEW
SET PARSEONLY
SET SHOWPLAN_ALL
SET SHOWPLAN_TEXT
SET SHOWPLAN_XML
USE Database_name
可以引用在同一存储过程中创建的对象,只要引用时已经创建了该对象即可。
可以在存储过程内引用临时表。
如果在存储过程内创建本地临时表,则临时表仅为该存储过程而存在;退出该存储过程后,临时表将消失。
如果执行的存储过程将调用另一个存储过程,则被调用的存储过程可以访问由第一个存储过程创建的所有对象,包括临时表在内。
如果执行对远程MySQL实例进行更改的远程存储过程,则不能回滚这些更改,而且远程存储过程不参与事务处理。
存储过程中的参数的最大数目为2100。
存储过程中的局部变量的最大数目仅受可用内存的限制。
根据可用内存的不同,存储过程最大可达128MB。
2.存储过程的语法
使用CREATE PROCEDURE语句创建存储过程的语法如下。
CREATE PROCDURE procedure_name
[{parameter data_type}
[VARYING][=default][OUTPUT]][,…n]
[WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION}]
[FOR REPLICATION]
AS sql_statement[…n]
其主要参数含义含义如下:
Procedure_name  存储过程的名称。过程名称在架构中必须唯一,可在procedure_name
前面使用一个数字符号“#”来创建局部临时过程,使用两个数字符号“#”来创建全局临时过程。对于CLR存储过程,不能指定临时名称。
parameter  过程中的参数。在CREATE PROCEDURE语句中可以声明一个或多个参数。除非定义了参数的默认值或者将参数设置为等于另一个参数,否则用户必须在调用过程时为每个声明的参数提供值,如果指定了FOR REPLICATION,则无法声明参数。
Data_type  参数的数据类型。所有数据类型均可以用作存储过程的参数。不过cursor数据类型只能用于OUTPUT参数。如果指定的数据类型为cursor,则还必须指定VARYING和OUTPUT关键字。
Default  参数的默认值。如果定义了dafault值,则无须指定此参数的值即可执行过程。默认值必须是常量或NULL。如果过程使用带like关键字的参数,则可包含下列通配符:%、_、[]、[^]。
Output  指示参数是输出参数。此选项的值可以返回给调用EXECUTE的语句。使用OUTPUT参数将值返回给过程的调用方。除非是CLR过程,否则text,ntext和image参数不能
用作OUTPUT参数。OUTPUT关键字的输出参数可以为游标占位符,CLR过程除外,<sql_statement>要包含在过程中的一个或多个T-SQL语句中。
3.创建存储过程
例如,在MySQL中的示例数据库【testdb】中创建一个名为book_proc的存储过程,它将从表中返回查询图书的编号、图书名称、库存量、价格等信息。使用CREATE PROCEDURE语句如下:
drop procedure if exists book_proc;
create procedure book_proc(IN name    varchar(20) )
begin
select * from bookinfo where bookname=name;
end
在MySQL数据库中执行该操作如图10-14所示。
图10-14  创建存储过程