存储过程 ﹏ヽ暗。殇╰゛Y 2022-05-09 00:24 221阅读 0赞 ## 存储过程 ## 文前话: 内心一场金戈铁马 -------------------- 定义: 1.存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。 2.存储过程中可以包含 逻辑控制语句 和 数据操纵语句 , 它可以接受参数 , 输出参数 , 返回单个或多个结果集以及返回值 ; 特点: 优: 1. 方便更改 > 由于应用程序随着时间推移会不断更改 , 增删功能 , SQL 语句会变得更复杂 , 存储过程为封装此类代码提供了一个替换位置 ; 1. 快 > 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中 , 所以存储过程运行要比单个的 SQL 语句块要快 ; 1. 减轻网络负担 > 由于在调用时只需用提供存储过程名和必要的参数信息 , 所以在一定程度上也可以减少网络流量 , 简单网络负担 ; 1. 可维护性高 > 可维护性高 , 更新存储过程通常比更改 , 测试以及重新部署程序集需要较少的时间和精力 ; 1. 代码精简 > 代码精简一致 , 一个存储过程可以用于应用程序代码的不同位置 ; 1. 安全 > 通过向用户授予对存储过程 (而不是基于表) 的访问权限 , 它们可以提供对特定数据的访问 ; > 提高代码安全 , 防止 SQL注入 (但未彻底解决 , 例如将数据操作语言 DML 附加到输入参数) ; > SQLParameter 类指定存储过程参数的数据类型 , 作为深层次防御性策略的一部分 , 可以验证用户提供的值类型 (但也不是万无一失 , 还是应该传递至数据库前得到附加验证) ; 缺: 1. 可移植性差 > 可移植性差 , 由于存储过程将应用程序绑定到 Server , 因此使用存储过程封装业务逻辑将限制应用程序的可移植性 ; 如果应用程序的可移植性在您的环境中非常重要 , 则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择 ; 1. 更新性差 > 如果更改范围大到需要对输入存储过程的参数进行更改 , 或者要更改由其返回的数据 , 则仍需要更新程序集中的代码以添加参数 , 等等 ; 创建存储过程 create procedure myBook() begin select * from book; end 调用存储过程: call myBook() 查看存储过程 1、通过数据字典表查询 存储过程的定义信息保存在数据字典表information\_schema.routines中: select ROUTINE_NAME, ROUTINE_TYPE from information_schema.ROUTINES where ROUTINE_SCHEMA='db1'; 2、使用show语句查询 SHOW PROCEDURE STATUS WHERE db='数据库名'; 3、查看存储过程详细的定义信息 SHOW CREATE PROCEDURE 数据库.存储过程名; 存储过程的修改 ALTER {PROCEDURE | FUNCTION}……语句只能改变存储过程的特征, 不能修改过程的参数以及过程体。如果想做这样的修改, 必须先使用DROP PROCEDURE 删除过程,然后使用and CREATE PROCEDURE重建过程。 存储过程的删除 DROP PROCEDURE [IF EXISTS] db_name.sp_name; 存储过程的安全 不是每个用户都可以调用一个存储过程;一个用户想调用其它用户创建的过程,必须被授予过程的execute权限: GRANT EXECUTE ON PROCEDURE <过程名> TO <user> 但是在mysql命令行中由于结束是“;” 所以需要修改一下结束符,命令为: delimiter // -------------------- #### 带参数的存储过程 #### MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ; 示例一: 第一步创建 create procedure GetScores( out minScore decimal(8,2), out avgScore decimal(8,2), out maxScore decimal(8,2) ) begin select min(score) into minScore from user; select avg(score) into avgScore from user; select max(score) into maxScore from user; end; 第二步调用存储过程参数必须用@开始该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量 @minScore, @avgScore, @maxScore , > call GetScores(@minScore, @avgScore, @maxScore); 然后即可调用显示该变量的值 : > select @minScore, @avgScore, @maxScore; 示例二: 使用传入(in)传出(out) 使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 : create procedure GetNameByID( in userID int, out userName varchar(200) ) begin select name from user where id = userID into userName; end; 调用存储过程 : call GetNameByID(1, @userName); select @userName;
相关 存储过程 什么是存储过程? 存储过程是由T-sql语句组成,通过这个语句实现一个功能并且给这个语句起个名字,待用到此功能的时候调用这个名字即可。 存储过程的好处: 1.数据库 ╰半夏微凉°/ 2022年07月13日 10:50/ 0 赞/ 179 阅读
相关 存储过程 MySQL的存储过程(procedure),也叫存储程序。它是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。可以通过存储过程的名称对其进行调用。 存储过程跟触发 浅浅的花香味﹌/ 2022年05月30日 02:09/ 0 赞/ 209 阅读
相关 存储过程一 存储过程介绍 存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化 后存储在数据库服务器中,使用时只要调用即可。在ORACLE中,若干个 有联系的过程可以组合在一起构成程序 川长思鸟来/ 2022年05月26日 03:13/ 0 赞/ 238 阅读
相关 存储过程 存储过程 文前话: 内心一场金戈铁马 -------------------- 定义: 1.存储过程(Stored Procedure)是在大型数 ﹏ヽ暗。殇╰゛Y/ 2022年05月09日 00:24/ 0 赞/ 222 阅读
相关 存储过程 dbms\_output.put\_line : 用于打印信息 create or replace PROCEDURE ALLJOB AS 用于创建存储过程 ,名称 港控/mmm°/ 2022年04月23日 05:20/ 0 赞/ 236 阅读
相关 存储过程 1、建立存储过程完成图书管理系统中的借书功能。 功能要求: l 借书时要求输入借阅流水号,借书证号,图书编号。(即该存储 淩亂°似流年/ 2022年04月22日 06:16/ 0 赞/ 340 阅读
相关 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以 ゞ 浴缸里的玫瑰/ 2022年01月22日 03:29/ 0 赞/ 265 阅读
相关 存储过程 1. 存储过程的类型: (1) 用户自定义存储过程 自定义存储过程即用户使用T\_SQL语句编写的、为了实现某一特定业务需求,在用户数据库 旧城等待,/ 2021年11月04日 22:12/ 0 赞/ 455 阅读
相关 存储过程 存储过程在我们后端开发很常用,我们经常在开发过程中需要写存储过程,其实存储过程没啥难的,就是一个固定的格式,最难的在于存储过程中我们要写的逻辑,业务方面的东西,这些就需要我们对 柔光的暖阳◎/ 2021年11月01日 23:20/ 0 赞/ 406 阅读
还没有评论,来说两句吧...