实验八 MySQL的存储过程

合集下载

mysql存储过程

mysql存储过程

mysql存储过程MySQL 5.0 版本开始⽀持存储过程。

存储过程(Stored Procedure)是⼀种在数据库中存储复杂程序,以便外部程序调⽤的⼀种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,⽤户可通过指定存储过程的名字并给定参数(需要时)来调⽤执⾏。

存储过程思想上很简单,就是数据库 SQL 语⾔层⾯的代码封装与重⽤。

优点存储过程可封装,并隐藏复杂的商业逻辑。

存储过程可以回传值,并可以接受参数。

存储过程⽆法使⽤ SELECT 指令来运⾏,因为它是⼦程序,与查看表,数据表或⽤户定义函数不同。

存储过程可以⽤在数据检验,强制实⾏商业逻辑等。

缺点存储过程,往往定制化于特定的数据库上,因为⽀持的编程语⾔不同。

当切换到其他⼚商的数据库系统时,需要重写原有的存储过程。

存储过程的性能调校与撰写,受限于各种数据库系统。

⼀、存储过程的创建和调⽤存储过程就是具有名字的⼀段代码,⽤来完成⼀个特定的功能。

创建的存储过程保存在数据库的数据字典中。

创建存储过程CREATE[DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_bodyproc_parameter:[ IN | OUT | INOUT ] param_name typecharacteristic:COMMENT 'string'| LANGUAGE SQL| [NOT] DETERMINISTIC| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }routine_body: Valid SQL routine statement[begin_label:] BEGIN [statement_list] ……END [end_label]DEFINER:定义者。

实例解析MySQL中的存储过程及存储过程的调用方法

实例解析MySQL中的存储过程及存储过程的调用方法

实例解析MySQL中的存储过程及存储过程的调⽤⽅法mysql在5.1之后增加了存储过程的功能, 存储过程运⾏在mysql内部,语句都已经编译好了,速度⽐sql更快. 存储过程与mysql相当于shell和linux系统。

如果你是程序员的话,那我告诉你存储过程实际上是⼀个⽅法,你只要调⽤这个⽅法,并且输⼊它设置好的参数就可以获取或者执⾏你想要的操作了. 看了如下存储过程实例,你会发现mysql存储过程和shell很像.下⾯存储过程内容为:调⽤存储过程,并且传⼊⽤户名,密码参数。

存储过程会将这她们存储到process_test表⾥⾯.看实例⼀,创建数据库mysql>create database db_proc;⼆,创建表mysql>CREATE TABLE `proc_test` (`id` tinyint(4) NOT NULL AUTO_INCREMENT, #ID,⾃动增长`username` varchar(20) NOT NULL, #⽤户名`password` varchar(20) NOT NULL, #密码PRIMARY KEY (`id`) #主键) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8; #设置表引擎和字符集三、创建存储过程create procedure mytest(in name varchar(20),in pwd varchar(20))#定义传⼊的参数begininsert into proc_test(username,password) values(name,pwd);#把传进来的参数name和pwd插⼊表中,别忘记分号end; #注意这个分号别忘记了create procedure mytest(in name varchar(20),in pwd varchar(20))#定义传⼊的参数begininsert into proc_test(username,password) values(name,pwd);#把传进来的参数name和pwd插⼊表中,别忘记分号end; #注意这个分号别忘记了四、测试调⽤存储过程⽤法:call 存储过程名称(传⼊的参数)call proc_test("绝⼼是凉⽩开","")username为”绝⼼是凉⽩开“传⼊数据库中,密码”“五、查看数据库中有⽆加⼊的数据select * from proc_test where username=‘绝⼼是凉⽩开';#如果有内容说明成功了六、删除存储过程drop procdure 存储过程名;七、通⽤分页存储过程代码及调⽤DROP PROCEDURE IF EXISTS pr_pager;CREATE PROCEDURE pr_pager(IN p_table_name VARCHAR(1024), /*表名*/IN p_fields VARCHAR(1024), /*查询字段*/IN p_page_size INT, /*每页记录数*/IN p_page_now INT, /*当前页*/IN p_order_string VARCHAR(128), /*排序条件(包含ORDER关键字,可为空)*/IN p_where_string VARCHAR(1024), /*WHERE条件(包含WHERE关键字,可为空)*/OUT p_out_rows INT /*输出记录总数*/)NOT DETERMINISTICSQL SECURITY DEFINERCOMMENT '分页存储过程'BEGIN/*定义变量*/DECLARE m_begin_row INT DEFAULT 0;DECLARE m_limit_string CHAR(64);/*构造语句*/SET m_begin_row = (p_page_now - 1) * p_page_size;SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size);SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string);SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string);/*预处理*/PREPARE count_stmt FROM @COUNT_STRING;EXECUTE count_stmt;DEALLOCATE PREPARE count_stmt;SET p_out_rows = @ROWS_TOTAL;PREPARE main_stmt FROM @MAIN_STRING;EXECUTE main_stmt;DEALLOCATE PREPARE main_stmt;END;1.取记录调⽤:call pr_pager('表名', '*', 25, 1, '', '', @count_rows);call pr_pager('user', '*', 15, 2, '', 'where id>3', @count_rows);call pr_pager('user', '*', 15, 1, 'group by password order by id desc', '', @count_rows);2.调⽤1后再取条数调⽤:select @count_rows;select @MAIN_STRING //select sqlselect @COUNT_STRING //seelct count sql⽀持多表级联 ,分组:复制代码代码如下:call pr_pager('job j left join enter_job ej on j.job_no=ej.job_no','j.*,ej.*','25','1','group by ej.put_away_user order byej.put_away_user desc','where j.job_table="enter"',@p_out_rows);<?phpfunction dump_single_form41report($sys_report_id) {$this->dbConn->setFetchMode(DB_FETCHMODE_ASSOC);//SET @a=1;CALL dbpi_report.simpleproc(@a);SELECT @a;$sql = "CALL dbpi_temp.dumpSingleReportForm41($sys_report_id);";$result = $this->dbConn->query($sql);if (mysql_error()) {die (mysql_error().'<b>:</b> dump_single_form41report(...)['.__LINE__.'];<br>'.$sql);}return $result;}function initQueuePool($sys_report_id, $username){$this->dbConn->setFetchMode(DB_FETCHMODE_ASSOC);$this->checkPreviousThread($sys_report_id, $username);$temptablename = "_".$username."_".$sys_report_id;$sql = "SET @a=".$sys_report_id.";";$this->dbConn->query($sql);$sql = "SET @b='".DB_REPORT.".".$temptablename."';";$this->dbConn->query($sql);$sql = "SET @c='".DB_PREPRODUCT."';";$this->dbConn->query($sql);$sql = "CALL ".DB_REPORT.".fm41_simpleproc(@a,@b,@c);";$this->dbConn->query($sql);}普通的查询,只返回⼀个结果集,⽽存储过程却返回⾄少两个结果集,其中⼀个就是存储过程的执⾏状态。

Mysql存储过程详解

Mysql存储过程详解

MySQL存储过程详解mysql存储过程详解1. 存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。

它可以有SQL语句和一些特殊的控制结构组成。

当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。

数据库中的存储过程可以看做是对编程中面向对象方法的模拟。

它允许控制数据的访问方式。

存储过程通常有以下优点:(1).存储过程增强了SQL语言的功能和灵活性。

存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。

存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。

而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).存储过程能实现较快的执行速度。

如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。

因为存储过程是预编译的。

在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。

而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).存储过程能过减少网络流量。

针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5).存储过程可被作为一种安全机制来充分利用。

系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

MySQL存储过程

MySQL存储过程

MySQL 存储过程1.引⾔存储过程是数据库的⼀个重要对象,可以封装SQL,完成⼀些复杂的业务逻辑。

使⽤存储过程,最主要的特点是执⾏速度快,其经过编译后会⽐⼀条⼀条单独执⾏快,也能避免频繁的连接⽽消耗资源。

2.语法结构2.1创建的语法结构语法结构如下:create[definer = user]procedure procedure_name([proc_parameter[,...]])body[definer = user] ⽤来指定⽤户的执⾏权限,默认所有⽤户可⽤;procedure_name 指定存储过程的名字;proc_parameter 指定存储过程的参数,类型有 in(⼊参)、out(出参)、inout(同时作为⼊参和出参);body 中写程序体,只要是合法的sql即可。

⼀般会以begin开始,以end结束,必须成对出现,通常⼀对即可。

在调⽤时,根据⼊参和出参,使⽤call 关键字和存储过程名调⽤即可。

2.2删除的语法结构drop procedure procedure_name删除时指定存储过程名称即可,不能加括号。

2.3⽰例演⽰1)创建存储过程create procedure proc_test()beginselect now() from dual;end;2)调⽤存储过程call proc_test();上述的存储过程仅是⽤来查询时间的,故执⾏结果是当前时间。

3)删除存储过程drop procedure proc_test;3.变量及赋值3.1局部变量是⽤户⾃定义的变量,尽在begin/end 块中有效。

1)语法declare var_name type [default var_value];使⽤declare 关键字声明变量名和类型,可指定默认值。

2)使⽤set赋值给变量赋值,可以使⽤set和into关键字,对所有变量都适⽤。

create procedure proc_var01()begindeclare user_name varchar(50);#直接声明,⽆默认值declare age int(11) default20;#声明的同时指定默认值set user_name = '张三';#赋值select user_name,age; #查询end;若有多个set对其赋值,则最终值是最后⼀个set 的结果。

mysql 存储过程 定义注释

mysql 存储过程 定义注释

mysql 存储过程定义注释摘要:1.MySQL存储过程简介2.MySQL存储过程的定义3.MySQL存储过程的注释4.总结正文:MySQL存储过程是一种将SQL语句和程序逻辑组合起来的功能强大的工具。

它允许用户在数据库中执行一系列预编译的SQL语句,从而提高了查询性能。

存储过程可以处理复杂的业务逻辑,简化应用程序的开发,同时也可以提高数据的安全性。

MySQL存储过程的定义包括以下几个部分:- 存储过程名称:用于标识存储过程的名称,应遵循命名规范,例如:`create_table`。

- 参数列表:用于传递数据给存储过程的变量,可以定义输入参数、输出参数和输入输出参数。

例如:`create_table(IN param1 INT, OUT param2 VARCHAR)`。

- 功能描述:存储过程的具体功能,例如:`创建一个表`。

- SQL语句:存储过程执行的SQL语句,例如:`CREATE TABLEnew_table (id INT PRIMARY KEY, name VARCHAR(255))`。

在MySQL存储过程中,可以使用注释来对代码进行说明。

注释对于理解和维护存储过程非常有帮助。

在MySQL中,可以使用`--`来编写单行注释,使用`/* */`来编写多行注释。

例如:```sqlDELIMITER //CREATE PROCEDURE create_table(IN param1 INT, OUT param2 VARCHAR)-- 功能描述:创建一个表BEGIN-- 定义变量DECLARE var1 INT;DECLARE var2 VARCHAR(255);-- 给变量赋值SET var1 = param1;SET var2 = "new_table";-- 执行SQL语句CREATE TABLE var2 (id INT PRIMARY KEY,name VARCHAR(255));-- 输出结果SELECT "表已创建";END//DELIMITER ;```总之,MySQL存储过程是一种非常有用的工具,可以帮助用户简化应用程序的开发,提高数据的安全性和查询性能。

MySQL存储过程实例详解

MySQL存储过程实例详解

MySQL存储过程实例详解```CREATE PROCEDURE procedure_name ([IN , OUT , INOUT] parameter datatype)[MODIFIESSQLDATA]BEGIN--声明和执行多个SQL语句END;```其中,procedure_name是存储过程的名称,datatype是参数的数据类型。

参数可以是IN参数(只能输入)、OUT参数(只能输出)或INOUT 参数(可读写输入和输出)。

MODIFIES SQL DATA子句用于指定存储过程是否会改变数据库中的数据。

下面是一个简单的MySQL存储过程示例,该存储过程接受一个IN参数,并在employees表中插入一条新记录:```sqlCREATE PROCEDURE add_employee(IN name VARCHAR(50))BEGININSERT INTO employees (name) VALUES (name);SELECT 'Employee added successfully' AS message;END;```在这个示例中,我们创建了一个名为`add_employee`的存储过程,并使用`IN`参数`name`作为输入。

存储过程将传递的参数插入到`employees`表中,并返回一条消息。

我们可以像调用函数一样调用存储过程:```sqlCALL add_employee('John Doe');```这将执行存储过程,并将`'John Doe'`作为参数传递给存储过程。

存储过程还可以具有多个参数,并且可以使用控制结构(如IF语句和循环)来实现更复杂的逻辑。

例如,下面是一个存储过程示例,将工资增加的百分比作为IN参数,并将增加的过程应用于`employees`表的所有记录:```sqlCREATE PROCEDURE increase_salary(IN percentage DECIMAL(5,2)) BEGINDECLARE done INT DEFAULT FALSE;DECLARE emp_name VARCHAR(50);--声明一个游标来获取员工名称DECLARE cur CURSOR FOR SELECT name FROM employees;--声明异常处理程序DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;--打开游标OPEN cur;--循环遍历所有记录read_loop: LOOP--获取下一个记录FETCH cur INTO emp_name;IF done THENLEAVE read_loop;ENDIF;--更新工资UPDATE employees SET salary = salary * (1 + percentage) WHERE name = emp_name;ENDLOOP;--关闭游标CLOSE cur;SELECT 'Salaries have been increased successfully' AS message;END;```以上示例中,我们创建了一个名为`increase_salary`的存储过程,并在参数列表中定义了一个`percentage`参数,它表示工资将增加的百分比。

MySQL中的存储过程和函数

MySQL中的存储过程和函数

MySQL中的存储过程和函数MySQL是一种常用的关系型数据库管理系统,被广泛应用于各种企业级应用和网站。

在MySQL中,存储过程和函数是两个非常重要的概念,它们提供了一种机制,允许开发者在数据库层面上实现复杂的业务逻辑。

在本文中,我们将深入探讨MySQL中的存储过程和函数,了解它们的定义、使用方法、优点和注意事项等。

一、存储过程存储过程是一段预编译的SQL代码,可被存储在数据库中并供以后使用。

它可以接受参数、执行多个SQL语句,并返回结果。

存储过程在数据库中具有独立性和复用性,可以被多个应用程序共享,提高了数据处理的效率和安全性。

1. 定义存储过程在MySQL中,可以使用CREATE PROCEDURE语句来定义一个存储过程。

例如,我们可以创建一个简单的存储过程来查询员工表中的数据:```mysqlDELIMITER //CREATE PROCEDURE GetEmployee()BEGINSELECT * FROM employee;END //DELIMITER ;```上述代码首先使用DELIMITER语句将结束符设置为双斜杠(//),然后使用CREATE PROCEDURE语句定义了名为GetEmployee的存储过程,通过SELECT语句查询了employee表中的所有数据。

最后,使用DELIMITER语句将结束符重新设置为分号(;)。

2. 调用存储过程在MySQL中,可以使用CALL语句来调用存储过程。

例如,我们可以调用上面定义的GetEmployee存储过程来查询员工表中的数据:```mysqlCALL GetEmployee();```通过CALL语句调用存储过程,并在后面加上括号即可。

3. 存储过程的参数和返回值存储过程可以接受参数,并且可以有返回值。

参数可以是输入参数和输出参数。

输入参数用于传递数据给存储过程,而输出参数用于返回数据给调用者。

在MySQL中,可以使用IN关键字定义输入参数,使用OUT或INOUT关键字定义输出参数。

如何使用MySQL存储过程

如何使用MySQL存储过程

如何使用MySQL存储过程随着数据量的不断增长以及复杂的业务逻辑需求,使用存储过程成为了数据库开发中的一个重要工具。

MySQL作为一种常用的关系型数据库,也提供了存储过程的支持。

本文将从存储过程的概念、创建和调用等方面展开,探讨如何使用MySQL存储过程优化数据库开发。

一、存储过程概述存储过程是一组预编译的SQL语句的集合,类似于函数,可以接受输入参数、执行查询以及返回结果等操作。

相比于单独执行SQL语句,存储过程可以提高数据库性能,减少网络流量,并简化复杂的SQL操作。

二、创建存储过程MySQL中创建存储过程需要使用CREATE PROCEDURE语句。

下面以一个简单的示例来说明如何创建存储过程。

```DELIMITER //CREATE PROCEDURE GetOrderCountByCustomer(IN customerName VARCHAR(50), OUT orderCount INT)BEGINSELECT COUNT(*) INTO orderCount FROM orders WHERE customer_name = customerName;END //DELIMITER ;```上述示例的存储过程名为GetOrderCountByCustomer,接受一个输入参数customerName和一个输出参数orderCount。

该存储过程根据输入的customerName统计订单数量,并将结果保存到orderCount中。

在创建存储过程时,需要注意以下几点:1. 使用DELIMITER语句设置分隔符。

由于存储过程中可能包含多个SQL语句,为了区分每个语句的结束,需要先设置分隔符。

示例中使用//作为分隔符。

2. 创建存储过程的语法为CREATE PROCEDURE。

在示例中,创建存储过程的语句为CREATE PROCEDURE GetOrderCountByCustomer。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、实验步骤:
执行以下内容: 1.启动 Navicat for MySQL,在 MySQL – 新建连接中完成连接参数配置。 2.登录到本地数据库服务器后,连接到 db5536 数据库上。
3.执行五、教学过程中(三)实验内容的 1 部分的(2)、(3)步骤创建及调用不
带参数的存储过程,验证不带参数的存储过程的创建和调用方法。 4.在步骤 3 的基础上,创建存储过程 third_p(),显示表 cqupt 中的数据,并对 其进行调用测试。结果如图所示:
以上 SQL 语句请保存,以备老师检查和写实验报告之用。
七、思考与练习
1、如何修改存储过程? 2、如果雇员数据重复插入,如何修改存储过程来正确显示结果?
八、实验报告要求
参见数据库实验报告模版
参考文献
[1]《数据库原理与设计》,王国胤等,电子工业出版社,2011 [2]《数据库系统及应用》,崔巍,高等教育出版社,2005
下次实验内容
了解 MySQL 触发器的创建、修改和删除的方法和步骤,掌握在 Navicat for MySQL 中对触发器的进行创建、修改和删除,掌握触发器触发测试的方法。
图 8-11 使用如下命令 CALL 存储过程名字,对刚才建立的第二个存储过程进行调用,如 图 8-12 所示: CALL second_p()//
图 8-12
2.创建及调用带参数的存储过程。 (1)MySQL Command Line Client 中创建存储过程: 输入如下语句,创建带输出参数的第三个存储过程,结果如图 8-13 所示: CREATE PROCEDURE simpleproc (OUT param1 INT) SELECT COUNT(*) INTO param1 FROM cqupt //
图 8-15 输入如下语句,调用第四个带传入参数的存储过程,结果如图 8-16 所示: CALL simpleproc1(5500)// Select @x// 上述语句的@x 为定义的变量
图 8-16 (四)注意事项 1、DELIMITER //是用于设置在创建存储过程时,出现的多行语句问题的特殊分 隔符。完成创建后,应该使用 DELIMITER ;语句,将分隔符设置回分号。 2、调用 MySQL 存储过程时,应使用如@a,@x 这样的变量来完成参数的传入和传 出。
图 8-6 在登录界面输入密码 mysql,如图 8-7 所示。
图 8-7 使用 Use db5536;语句打开 db5536 数据库, 使用 DELIMITER //语句设置//为新的分割符(DELIMITER 与//之间有一个空格), 如图 8-8 所示。
图 8-8 输入如下语句,创建第一个存储过程,注意引号为英文半角状态下单引号: Create procedure first_p() Select 'Hello MySQL,This is my first procedure ' // 创建成功,如图 8-9 所示。
(三)实验内容 1.创建及调用不带参数的存储过程: (1)双击桌面 Navicat for MySQL 快捷方式,连接到 mysql 数据库上。点击查
询->新建查询,输入如下语句,确定 MySQL 数据库版本: Select VERSION();
然后点击
按钮,运行查询语句。如图 8-1 所示。
图 8-1 输入如下语句,创建示例数据库: CREATE DATABASE db5536;
三、实验的重点与难点
1、重点: (1)存储过程的创建、修改和删除。 (2)存储过程的调用。
2、难点: MySQL 的分隔符定义 存储过程的创建 带参数的存储过程调用。
四、仪器设备及用具
硬件:投影仪、每位同学分配已连接校园网 PC 机一台。 软件:本机已安装 MySQL 5.5 数据库平台。
五、教学过程
USE db5536; 然后点击
按钮,运行查询语句。如图 8-2 所示。
-3 所示。
图 8-3 刷新后,新建立的 db5536 出现在数据库列表中,双击 db5536 连接到该数据库上, 以后的操作都在 db5536 上进行,如图 8-4 所示。
图 8-4 点击查询->新建查询,输入如下语句,创建示例表和插入演示数据: CREATE TABLE cqupt (s1 INTEGER); INSERT INTO cqupt VALUES (5);
然后点击
按钮,运行查询语句。如图 8-5 所示。
图 8-5 (2)MySQL Command Line Client 中创建存储过程: 可以运行 MySQL 的命令行客户端软件,如图 8-6 所示。
本次实验了解 MySQL 存储过程的创建、修改和删除的方法和步骤,掌握在 Navicat for MySQL 中对存储过程的进行创建、修改和删除,掌握在 MySQL Command Line Client 中调用带参数和不带参数的存储过程。
二、实验要求
1、实验前:预习实验内容,学习相关知识。 2、实验中:按照实验内容要求进行实验,实验时注意每种 SQL 语句的基本命令 及各个关键字的含义,做好实验记录。 3、实验后:分析实验结果,总结实验知识,得出结论,按格式写出实验报告。 4、在整个实验过程中,要独立思考、独立按时完成实验任务,不懂的要虚心向 教师或同学请教。 5、要求按指定格式书写实验报告,且报告中应反映出对本次实验的总结,下次 实验前交实验报告。
5. 执行五、教学过程中(三)实验内容的第 2 部分创建及调用带参数的存储过 程,验证带参数的存储过程的创建和调用方法。 6.在步骤 5 的基础上,创建存储过程 simpleproc2(),对传入参数进行乘以 10 的处理,变量定义@x,并对其进行调用测试。结果如图所示:
7.用 Drop Procedure 语句删除存储过程 first_p。如图所示:
图 8-13 输入如下语句,创建带输入参数的第四个存储过程,结果如图 8-14 所示: CREATE PROCEDURE simpleproc1 (IN param1 INT) SET @x = param1 - 100 //
图 8-14 (2) MySQL Command Line Client 中调用存储过程: 输入如下语句,调用第三个带传出参数的存储过程,结果如图 8-15 所示: CALL simpleproc(@a)// Select @a// 上述语句的@a 为定义的变量
图 8-9 输入如下语句,创建第二个存储过程,注意引号为英文半角状态下单引号: Create procedure second_p() Select current_date from cqupt // 创建成功,如图 8-10 所示。
图 8-10 (3)MySQL Command Line Client 中调用存储过程: 使用如下命令 CALL 存储过程名字,对刚才建立的第一个存储过程进行调用,如 图 8-11 所示: CALL first_p()//
实验八 MySQL 的存储过程
一、实验目的
存储过程是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。 存储过程分为两类:1.系统提供的存储过程;2.用户自定义存储过程。
存储过程具有的优点:1.存储过程允许标准组件式编程;2.存储过程能够实 现较快的执行速度;3.存储过程能够减少网络流量;4.存储过程可被作为一种安 全机制来充分利用。存储过程是可复用的组件!想象一下如果你改变了主机的语 言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。存储过 程是可以移植的!
(一)实验预习 (1)熟悉 SQL 中的 CREATE PROCEDURE 语句的格式及所用的关键字含义及用法。 (2)掌握存储过程创建、修改和删除的一般方法。 (3)掌握存储过程调用的一般方法。
(二)实验原理 在 Navicat for MySQL 中查询数据库版本,创建示例数据库库、表、数据。
在 MySQL Command Line Client 使用 CREATE PROCEDURE 语句创建存储过程,对 存储过程的修改、删除等操作。在 MySQL Command Line Client 中调用存储过程。
相关文档
最新文档