当前位置:文档之家› 数据库技术项目化教程(基于MySQL)-项目8 认识MySQL的存储过程

数据库技术项目化教程(基于MySQL)-项目8 认识MySQL的存储过程

数据类型 [,[IN|OUT|INOUT] 参数名 数据类型…]])[特性...] 过程体
• 例如: DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
MySQL > SET @p_in=1; MySQL > CALL demo(@p_in); +------+ | p_in | +------+ | 1| +------+
MySQL> SELECT @p_in; +-------+ | @p_in | +-------+ |1 | +-------+
• 而后面的“DELIMITER ;”意为把分隔符还原为默认 的“;”(注意在DELIMITER与;之间要有一个空格)。
任务1 初识MySQL存储过程 了解并创建存储过程
• 存储过程的参数类型:
IN:表示该参数值必须在调用存储过程时指定,在存 储过程中这个值是不能被返回的。
OUT:表示该参数的值可以被存储过程改变,并且可 以返回。
任务1 初识MySQL存储过程 了解并创建存储过程
• 存储过程的优点: • (1)增强SQL语言的功能和灵活性。 • (2)标准组件式编程。 • (3)较快的执行速度。 • (4)减少网络流量。 • (5)作为一种安全机制来充分利用。
任务1 初识MySQL存储过程 了解并创建存储过程
• MySQL存储过程的创建语法: • CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名
-- 有参数,参数全为in(默认值)
DECLARE @t1 INT;
-- 有参数,有in,out,inout
DECLARE @t2 INT default 3;
call proc_name(1,2,@t1,@t2)
任务1 初识MySQL存储过程 存储过程调用
• 【例8-2】调用例8-1创建的名为demo的存储过程。
项目8 认识MySQL的存储过程
• 任务1 初识MySQL存储过程 • 任务2 错误触发条件和错误处理程序 • 任务3 MySQL数据库中的游标 • 任务4 使用预处理SQL语句
任务1 初识MySQL存储过程 了解并创建存储过程
• 存储过程(Stored Procedure)是一组为了完成 特定功能的SQL语句集,经编译后存储在数据库 中,用户通过指定存储过程的名字并给定参数 (如果该存储过程带有参数)来调用执行它。
任务1 初识用存储过程需要用call命令和存储过程名以及一个括号,括号里面根 据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。 具体的调用方法可以参看下面例子。
例如:
call proc_name()
-- 无参数
call proc_name(1,2)
任务1 初识MySQL存储过程 了解并创建存储过程
• MySQL数据库默认以";"为分隔符,如果没有声明 分割符,则编译器会把存储过程当成SQL语句进 行处理,编译过程会报错。
• 所以要事先用“DELIMITER //”语句修改当前段分 隔符为“//”,也就是说,此语句之后的所有语句以 “//”作为分隔符,让编译器把第一次出现的“//”和 第二次出现的“//”之间的全部内容当做存储过程的 代码,不会执行这些代码。
• 【例8-3】创建demo_out_parameter存储过程,参数采用OUT类型。
MySQL > DELIMITER // MySQL > CREATE PROCEDURE demo_out_parameter(OUT p_out int) -> BEGIN -> SELECT p_out; -> SET p_out=2; -> SELECT p_out; -> END; -> // MySQL > DELIMITER ;
INOUT:表示该参数在调用时指定,并且可以被改变 和返回。
任务1 初识MySQL存储过程 了解并创建存储过程
存储过程的过程体开始与结束使用BEGIN与END进行标识。举例如下: 【例8-1】in参数实例 MySQL > DELIMITER // -- 修改结束符 MySQL > CREATE PROCEDURE demo(IN p_in int) -- 定义带参数的 存储过程 -> BEGIN -> SELECT p_in; -> SET p_in=2; -> SELECT p_in; -> END; -> // MySQL > DELIMITER ;
+------+ | p_in | +------+ | 2| +------+
任务1 初识MySQL存储过程 存储过程调用
• 在例8-2中,先是创建了一个名为demo的存储过程,该存储过程有一 个参数为p_in,这个参数是int类型,代表了一个整数,并且前面由IN 来修饰,说明该参数在存储过程执行过程中,不能作为返回值。
• 在调用demo存储过程执行之前,先设定了变量p_in的值为1,然后调 用了存储过程demo,而该存储过程的内容就是修改并显示p_in的值, 因此在输出段看到出现了两次p_in的值,第一次是存储过程刚开始执 行时第一条语句的结果,显示p_in的值;第二次是存储过程中第三条 语句的结果,显示了p_in被修改之后的新值。
• 当存储过程执行完毕,又一次调用 p_in变量的值,发现该变量的值仍 然是1,这是因为demo存储过程在设定参数的时候已经确定了参数为 IN,因此无论存储过程内部如何对p_in变量进行修改,一旦存储过程 退出,p_in变量的值都将恢复到存储过程执行之前的状态。
任务1 初识MySQL存储过程 存储过程调用
任务1 初识MySQL存储过程 了解并创建存储过程
• MySQL数据库中的存储过程和函数中允许包含 DDL(Data Definition Language数据库模式定义 语言,是用于描述数据库中要存储的现实世界实 体的语言)语句,也允许在存储过程中执行提交 (commit,即确认之前的修改)或者回滚 (rollback,即放弃之前的修改),但是存储过程 和函数中不允许执行LOAD DATA INFILE 语句。 此外,存储过程和函数中可以调用其他存储过程 或者函数。。
相关主题