《MySQL数据库》课件—08认识MySQL的存储过程

  • 格式:pptx
  • 大小:339.14 KB
  • 文档页数:45

下载文档原格式

  / 45
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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