数据库中对存储过程的理解

1.存储过程的概念

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。经编译后存储在数据库中。

存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程是由 流控制 和 SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中。

存储过程 可由应用程序通过一个调用来执行,而且允许用户声明变量。

同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。

2.存储过程的优点

① 存储过程的能力大大增强了SQL语言的功能和灵活性。

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

② 可保证数据的安全性和完整性。

理由1:通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。

理由2:通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

③ 在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。

这种已经编译好的过程可极大地改善SQL语句的性能。

由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。

④ 可以降低网络的通信量。

理由:客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL语句相比自然数据量少了很多。

⑤ 使体现企业规则的运算程序放入数据库服务器中,以便:

1). 集中控制。

2). 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。

企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。

如果把体现企业规则的运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。

3.存储过程的缺点

存储过程将给服务器带来额外的压力。
  存储过程多多时维护比较困难。
  移植性差,在升级到不同的数据库时比较困难。

  调试麻烦,SQL语言的处理功能简单。

4.存储过程的种类

① 系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。

② 本地存储过程:用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。

③ 临时存储过程:分为两种存储过程:

一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

④ 远程存储过程:在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

⑤ 扩展存储过程:扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。

5.存储过程的使用

传统软件行业大量使用存储过程。

程序写的数据逻辑效率不高,影响整体速度。在数据库资源足够的前提下,将压力放在数据库端是好选择。充分利用商业数据库庞大团队对数据库的各种优化。

比如ERP一类的软件,用户极少,但是业务复杂,数据量和数据复杂度极高,及时性和一致性要求极高。这种时候存储过程就派上大用场了。

大多数的互联网应用数据关系简单,业务简单。瓶颈一般在于数据库的读写,这些在存储过程话题中各位前辈已经描述的很清楚了。所以数据库要尽快读写,这时候所有其他的都尽量放在web服务器上来做,更省成本。

存储过程的困难在于对业务数据的理解和关系代数。写错了不好调试,技巧不足导致性能太差等等。

6.存储过程的创建

创建存储过程的语法如下:
CREATE PROC[EDURE] 存储过程名 
@参数1 [数据类型]=[默认值] [OUTPUT] 
@参数2 [数据类型]=[默认值] [OUTPUT]
AS 
SQL语句
EXEC 过程名[参数]

6.1

create procedure pro_student

as
    select * from student;
--执行不带参数的存储过程
exec pro_student;
6.2

create proc proc_getStudentRecord

(
    @sex varchar(2) out, --输出参数
    @age int output--输入输出参数

as
    select * from student where ssex = @sex and sage = @age;
 
---------------------
作者:zmm198811
来源:CSDN
原文:https://blog.csdn.net/zmm198811/article/details/79966834
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/sunnyjiao/p/9958949.html

时间: 2024-08-24 11:53:41

数据库中对存储过程的理解的相关文章

显示数据库中的存储过程__转

It's no easy trick to see stored procedures in a database programmatically with a scripting language like ASP. If you're using MS Access, you're out of luck. Access provides no way to see the actual meat of a stored procedure although you can get the

java中调用数据库中的存储过程和函数

public static void main(String[] args) {         Connection conn =getConnection(url,user, pwd);         System.out.println("数据连接成功");         CallableStatement cs=null;         try         {    //调用数据库中的存储过程              cs = conn.prepareCall(&q

mysql导入数据库中的存储过程和函数出现错误的解决办法

mysql导入数据库中的存储过程和函数出现错误的解决办法 调用一个远程拷贝的本地Mysql的储存过程 报错:[Err] 1449 - The user specified as a definer ('repl'@'192.168.1.%') does not exist  解决想法: 凭借以前经常见到的[email protected]报错,给root赋值所有权限: grant all privileges on *.* to [email protected]"%" identif

Java基础系列12:使用CallableStatement接口调用数据库中的存储过程

前言:以下内容均以MySQL中的存储过程举例说明 一 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是

在SQL Server数据库中执行存储过程很快,在c#中调用很慢的问题

记录工作中遇到的问题,分享出来: 原博客地址:https://blog.csdn.net/weixin_40782680/article/details/85038281 今天遇到一个比较郁闷的问题,如下图: 点击库存或者点击销售,查询数据很慢,有的将近几十秒,查询数据用的是存储过程,在数据库中执行存储过程,查询数据是很快的,速度非常理想,1秒不到,但是c#程序中调用就要很久. 百度了很多,后来这上面的那篇文章中找到了原因所在: 原因分析:由于存储过程是预编译的, 在第一次执行的时候, 会生成执

SQL Server中对存储过程的理解

数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL的相关语句即可,创建存储过程,就像函数一样,可以有参,也可以无参,无参的时候写起来很简单: CREATE PROC hello AS BEGIN /*....*/ END GO 执行的时候也是,只需要在自定义存储过程执行即可 EXEC hello 有参的时候写法也不陌生: CREATE PROC h

浅谈数据库中的存储过程

一.存储过程与函数的区别: 1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象. 3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面. 二.存储过程的优点: 1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 2.允许模块化程序设计 – 类似方法的复用 3.提高系统安全性 –

数据库——浅谈数据库中的存储过程(转)

一.存储过程与函数的区别: 1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强. 2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象. 3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面. 二.存储过程的优点: 1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的 2.允许模块化程序设计 – 类似方法的复用 3.提高系统安全性 –

利用SQL语句查找某数据库中所有存储过程包含的内容(转)

Use 数据库DECLARE @ProcName varchar(50)Create Table #tmpName(Content  varchar(2000))Create Table #tmp(ProcName  varchar(2000),Content1 varchar(8000))--定义一个游标DECLARE SearchProc CURSOR FOR--查询数据库中存储过程的名称,尽量去除系统PROC,可以根据crdate时间字段来寻找非系统PROCselect name from