网站新闻前置备案,如何把代码wordpress,做淘宝客网站制作教程视频,行距网站文章目录 前言一、存储过程的定义1、系统存储过程2、本地存储过程3、临时存储过程4、远程存储过程5、扩展存储过程 二、创建存储过程语法1.简单示例 三、调用存储过程四、删除存储过程四、存储过程的优缺点优点缺点 总结 前言
上一篇学习了SQL的DDL#xff08;数据定义语言数据定义语言和DML数据操作语言接着我们来学习SQL的存储过程 一、存储过程的定义
存储过程(Stored Procedure)是在大型数据库系统中一组为了完成特定功能的一个或多个SQL语句它存储在数据库中一次编译后永久有效用户通过指定存储过程的名字并给出参数如果该存储过程带有参数来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
1、系统存储过程
以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。
2、本地存储过程
用户创建的存储过程是由用户创建并完成某一特定功能的存储过程事实上一般所说的存储过程就是指本地存储过程。
3、临时存储过程
分为两种存储过程: 一是本地临时存储过程以#字号(#)作为其名称的第一个字符则该存储过程将成为一个存放在tempdb.数据库中的本地临时存储过程且只有创建它的用户才能执行它; 二是全局临时存储过程以两个#字号(##)号开始则该存储过程将成为一个存储在tempdb.数据库中的全局临时存储过程全局临时存储过程一旦创建以后连接到服务器的任意用户都可以执行它而且不需要特定的权限。
4、远程存储过程
在SQL Server2005中远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。
5、扩展存储过程
扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程而且扩展存储过程的名称通常以xp_开头。
二、创建存储过程语法
CREATE PROC | PROCEDURE procedure_name
[{参数数据类型}[默认值][OUTPUT],
{参数数据类型}[默认值][OUTPUT],
....
]
AS
beginsql_statements
如何执行 Exec procedure_name
1.简单示例
CREATE PROC sp_test param1 INT, param2 VARCHAR( 16) AS SELECT * FROM test WHERE idparam1 AND t_noparam2 ; Go 上面就是一个简单的示例。
注意:存储过程在创建阶段可以带参数或不带参数,不带参数的一般是执行一些不需要传递参数的语句就可以完成的功能带参数那就是需要传递参数的sQL语句就像上面的示例传递了两个参数给sQL语句。带参数的一定要定义参数类型是字符型的还要定义长度给参数加默认值是可选的。
注:“sp_test为需要创建的存储过程的名字该名字不可以以阿拉伯数字开头
三、调用存储过程
存储过程可以在三种环境下被调用: 1.command命令下基本语法为: exec sp…name [参数名]; 2.SQL环境下基本语法为: call sp…name[参数名]; 3.PL/SQL环境下基本语法为: begin sp…name [参数名] end;
四、删除存储过程
1.基本语法:
drop procedure sp..name⒉注意事项 不能在一个存储过程中删除另一个存储过程只能调用另一个存储过程
四、存储过程的优缺点
优点
提高性能
SQL语句在创建过程时进行分析和编译。 存储过程是预编译的在首次运行一个存储过程时查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划这样在执行过程时便可节省此开销。
降低网络开销
存储过程调用时只需用提供存储过程名和必要的参数信息从而可降低网络的流量。
便于进行代码移植
数据库专业人员可以随时对存储过程进行修改但对应用程序源代码却毫无影响从而极大的提高了程序的可移植性。
增强安全性 提高代码安全防止 SQL注入。这一点sql语句也可以做到。
缺点 SQL本身是一种结构化查询语言但不是面向对象的的本质上还是过程化的语言面对复杂的业务逻辑过程化的处理会很吃力。同时SQL擅长的是数据查询而非业务逻辑的处理如果如果把业务逻辑全放在存储过程里面违背了这一原则。 如果需要对输入存储过程的参数进行更改或者要更改由其返回的数据则您仍需要更新程序集中的代码以添加参数、更新调用等等这时候估计会比较繁琐了。 开发调试复杂由于IDE的问题存储过程的开发调试要比一般程序困难。 没办法应用缓存。虽然有全局临时表之类的方法可以做缓存但同样加重了数据库的负担。如果缓存并发严重经常要加锁那效率实在堪忧。 不支持群集数据库服务器无法水平扩展或者数据库的切割水平或垂直切割。数据库切割之后存储过程并不清楚数据存储在哪个数据库中。 总结 适当的使用存储过程能够提高我们SQL查询的性能 存储过程不应该大规模使用滥用。 随着众多ORM 的出现存储过程很多优势已经不明显。 SQL最大的缺点还是SQL语言本身的局限性——SQL本身是一种结构化查询语言我们不应该用存储过程处理复杂的业务逻辑——让SQL回归它“结构化查询语言”的功用。复杂的业务逻辑还是交给代码去处理吧。
参考文章https://www.cnblogs.com/wiggin-Z/p/10614497.html