精华内容
下载资源
问答
  • 存储过程的创建、存储过程的调用、特殊的存储过程-触发器
  • 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 1.存储过程只在创造时进行编译,以后每次...

    存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而
    一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速
    度。
    2.当对数据库进行复杂操作时(如对多个表进行
    Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来
    与数据库提供的事务处理结合一起使用。
    3.存储过程可以重复使用,可减少数据库开发人员的工作量
    4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    相对于直接使用SQL 语句,在应用程序中直接调用存储过程有以下好处:
    (1)减少网络通信量。
    调用一个行数不多的存储过程与直接调用SQL 语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL 语句,那么其性能绝对比一条一条的调用SQL 语句要高得多。
    (2)执行速度更快。
    有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。
    (3)更强的适应性。
    由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
    (4) 分布式工作。
    应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。

    缺点:
    1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
    2.可移植性差
    由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

    下面的博客是根据自己工作中总结的一些存储过程的博客:
    Oracle存储过程之merge into 函数(一)
    http://blog.csdn.net/z1729734271/article/details/52386664
    Oracle存储过程之merge into 函数(二)
    http://blog.csdn.net/z1729734271/article/details/52437856
    oracle 存储过程之游标(loop)使用
    http://blog.csdn.net/z1729734271/article/details/52351700

    展开全文
  • SQL存储过程概念 优点及语法 整理在学习程序过程之前,先了解下什么是存储过程?为什么要用存储过程,他有那些优点 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫...

    SQL存储过程的概念 优点及语法

    整理在学习程序过程之前,先了解下什么是存储过程?为什么要用存储过程,他有那些优点

    定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

    讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?  Microsoft公司为什么还要添加这个技术呢?
    那么存储过程与一般的SQL语句有什么区别呢?

    存储过程的优点:
       1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
      2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

      3.存储过程可以重复使用,可减少数据库开发人员的工作量

      4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

    存储过程的种类:

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

      如 sp_help就是取得指定对象的相关信息  

       2.扩展存储过程   以XP_开头,用来调用操作系统提供的功能

    以下为引用的内容:
      exec master..xp_cmdshell 'ping 10.8.16.1'

        3.用户自定义的存储过程,这是我们所指的存储过程

    常用格式

    以下为引用的内容:

       Create procedure procedue_name

        [@parameter data_type][output]

       [with]{recompile|encryption}

       as  

            sql_statement

     解释: 

    output:表示此参数是可传回的

     with {recompile|encryption}

    recompile:表示每次执行此存储过程时都重新编译一次


    encryption:所创建的存储过程的内容会被加密

    SQL存储过程学习:存储过程的创建

    表book的内容如下

       编号    书名                           价格

       001      C语言入门                   $30

       002      PowerBuilder报表开发  $52

     实例1:查询表Book的内容的存储过程

    以下为引用的内容:

       create proc query_book

          as

          select * from book

       go

       exec query_book 
     
     实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额

    以下为引用的内容:

       Create proc insert_book

        @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output

       with encryption  ---------加密

        as

       insert book(编号,书名,价格) Values(@param1,@param2,@param3)
       select @param4=sum(价格) from book
      go

      执行例子:

     以下为引用的内容:
      declare @total_price money
      exec insert_book '003','Delphi 控件开发指南',$100,@total_price
      print '总金额为'+convert(varchar,@total_price)
      go

    存储过程的3种传回值:
       1.以Return传回整数
       2.以output格式传回参数
       3.Recordset

     传回值的区别:
           output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中 

    实例3:设有两个表为Product,Order,其表内容如下:

    以下为引用的内容:
          Product
               产品编号       产品名称    客户订数    
                001             钢笔         30        
                002             毛笔         50         

                003             铅笔         100       
          order 
               产品编号         客户名     客户订金
                001              南山区      $30
                002              罗湖区      $50
                003              宝安区      $4

    请实现按编号为连接条件,将两个表连接成一个临时表,该表只含编号.产品名.客户名.订金.总金额,
    总金额=订金*订数,临时表放在存储过程中

     代码如下:

    以下为引用的内容:
         Create proc temp_sale
         as
           select a.产品编号,a.产品名称,b.客户名,b.客户订金,a.客户订数* b.客户订金 as总金额
           into #temptable from Product a inner join order b on a.产品编号=b.产品编号
        if  @@error=0
           print 'Good'
        else
           print 'Fail'
         go

    SQL存储过程学习:存储过程的调用

    调用带参数存储过程的几种方式

    1) 这也是最简单的方法,两个输入参数,无返回值,用于Insert,Update,Delete操作较多。


    以下为引用的内容:
       conn.Execute "procname varvalue1,varvalue2"  

    2) 如果要返回 Recordset 集:

    以下为引用的内容:
       set rs = server.createobject("adodb.recordset")
       rs.Open "Exec procname varvalue1, varvalue2",conn


    3) 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。  

       首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。

     

     

    特殊的存储过程-触发器

    1.触发器的概念及作用

        触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如Update、 Insert、 Delete 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

        触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

    (1) 强化约束(Enforce restriction)

     触发器能够实现比CHECK 语句更为复杂的约束。

    (2) 跟踪变化Auditing changes

     触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

    (3) 级联运行(Cascaded operation)。

    触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

    (4) 存储过程的调用(Stored procedure invocation)。

    为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。

        由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(Insert、 Update、 Delete)的多个触发器能够对同一种数据操作采取多种不同的处理。

         总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。
    2.触发器的种类

      SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(Insert Update Delete) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。

         INSTEAD OF 触发器表示并不执行其所定义的操作(Insert、 Update、 Delete),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF 触发器。  

    展开全文
  • 定义:一次性的执行成批的sql语句构成了一个存储过程(把多次的操简化为一次) 优点:成批量的处理减少客户与服务器的交流次数,提升mysql的速度;服务器端进行,移植性好;安全性要求高的行业适用;包含流程控制...

    定义:一次性的执行成批的sql语句构成了一个存储过程(把多次的操简化为一次)

    优点:成批量的处理减少客户与服务器的交流次数,提升mysql的速度;服务器端进行,移植性好;安全性要求高的行业适用;包含流程控制结构的sql语句的集合。

    创建过程:

    语法 crreate procedure p_name(参数)注意:参数分三部分组成

    以前‘;’表示每条语句的结束,现在用‘delimiter’表示新的结束符号格式(delimter //)

    例如:创建存储过程,显示“hello world!”

    步骤:1、检验mysql版本;2、存储过程是属于数据库的;3、声明结束符;4、创建存储过程;5、调用存储过程;6、恢复结束符

              select   version()

              show databases;有数据库

              create database db1;无数据库

              use db1;

              create procedure p1() select "hello world!"//

               call p1();//

                delimiter;

    用户变量=参数:(调用参数时候,调用必须有定义的实参(类型,数量)将信息带入到存储过程)声明开始set @x=3;到断开连接结束并且不能和其他用户共享

    作用域:作用范围:从声明位置开始到end结束

    存储过程的局部变量:临时结果只在存储过程中用一下,所以需要创建局部变量

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 存储过程 sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。应用程序需要用的时候直接调用就可以了,所以效率会高。...使用存储过程有以下的优点: * 存储过程的能力大大增强了...

    存储过程

    sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。应用程序需要用的时候直接调用就可以了,所以效率会高。

    存储过程介绍

    存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE中,若干个有联系的过程可以组合在一起构成程序包。

    使用存储过程有以下的优点:

    * 存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。

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

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

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

    * 再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。

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

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

    # 集中控制。

    # 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的 运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。

    数据库存储过程的实质就是部署在数据库端的一组定义代码以及SQL。

    利用SQL的语言可以编写对于数据库访问的存储过程,其语法如下:

     1 CREATE PROC[EDURE] procedure_name [;number] 
     2 [ 
     3 {@parameter data_type} ][VARYING] [= default] [OUTPUT] 
     4 ] 
     5 [,...n] 
     6 [WITH 
     7 { 
     8 RECOMPILE 
     9 | ENCRYPTION 
    10 | RECOMPILE, ENCRYPTION 
    11 } 
    12 ] 
    13 [FOR REPLICATION] 
    14 AS 
    15 sql_statement [...n]

    [ ]内的内容是可选项,而()内的内容是必选项,

    例: 若用户想建立一个删除表tmp中的记录的存储过程Select_delete可写为:

    1 Create Proc select_del As 
    2 Delete tmp

         例:用户想查询tmp表中某年的数据的存储过程

    1 create proc select_query @year int as 
    2 select * from tmp where year=@year

      在这里@year是存储过程的参数

    例:该存储过程是从某结点n开始找到最上层的父亲结点,这种经常用到的过程可以由存储过程来担当,在网页中重复使用达到共享。

    空:表示该结点为顶层结点

    fjdid(父结点编号) 

    结点n 非空:表示该结点的父亲结点号

    dwmc(单位名称)

     1 CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output 
     2 as 
     3 declare @stop int 
     4 declare @result varchar(80) 
     5 declare @dwmc varchar(80) 
     6 declare @dwid int 
     7 set nocount on 
     8 set @stop=1 
     9 set @dwmc="" 
    10 select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
    11 set @result=rtrim(@dwmc) 
    12 if @dwid=0 
    13 set @stop=0 
    14 while (@stop=1) and (@dwid<>0) 
    15 begin 
    16 set @dwidold=@dwid 
    17 select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
    18 if @@rowcount=0 
    19 set @dwmc="" 
    20 else 
    21 set @result=@dwmc+@result 
    22 if (@dwid=0) or (@@rowcount=0) 
    23 set @stop=0 
    24 else 
    25 continue 
    26 end 
    27 set @dwmcresult=rtrim(@result) 
    28 
    29 使用exec pro-name  [pram1 pram2.....]

     

    转载于:https://www.cnblogs.com/fuddlemare/archive/2013/04/25/3042155.html

    展开全文
  • 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程存储过程是由流控制和SQL 语句书写的过程,这...
  • 存储过程”的定义及优点 存储过程 sql语句执行的时候要先编译,然后执行。存储过程就是编译好了的一些sql语句。应用程序需要用的时候直接调用就可以了,所以效率会高。 存储过程介绍 存储过程是由流控制和SQL...
  • 定义: 将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。...存储过程优点
  • SQL存储过程优点

    2018-06-06 16:21:02
    Ø 存储过程概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。 存储过程中可以包含逻辑控制语句和数据...
  • 存储过程概念

    2016-04-10 22:00:38
    1、存储过程概念 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数来执行它,通常情况下,将常用或很复杂的语句编写成存储过程存储过程(Stored ...
  • 存储过程概念及优点存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在...
  • 存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序...
  • 存储过程 是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过...可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 可以在单
  • 1.什么是存储过程,有哪些优缺点? 存储过程是在大型数据库中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译之后永久生效,用户通过去指定存储过程的名字并给出参数来执行它。 优点: 可以...
  • 一、 存储过程概念优点,语法 在写笔记之前,首先需要整理好这些概念性的东西,否则的话,就会在概念上产生陌生或者是混淆的感觉。 概念:将常用的或者是很复杂的工作,预先利用SQL语句写好并用一个指定的名称...
  • 存储过程入门概念

    2020-07-27 22:37:33
    存储过程 概念 存储过程(Stored Procedure) 是一组预先编译好的Transact-SQL语句。将其放在服务器上,由用户通过指定存储过程的名字来执行它。存储过程可以作为一个独立的数据库对象,也可以作为一个单元被用户的...
  • 一、 数据库存储过程的基本概念: 1、 存储过程概念: 百度百科对存储过程的概述是这样的: 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,  经过第...
  • 存储过程概念

    千次阅读 2012-01-05 13:19:14
    存储过程有以下的优点存储过程的能力大大增强了SQL语言的功能和灵活性,存储过程可以用流控制语句进行编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 可保证数据的安全性和完整性  通过存储过程...
  • sql存储过程 数据库编程过程中经常会用到存储过程,相比平常的sql语句,存储过程 更 方便,快速,安全 1.概念存储过程是一组 为了完成特定功能的 sql 语句集,存储在数据库中并只需要创建时编译(所以存储过程...
  • SQL存储过程使用介绍

    万次阅读 多人点赞 2017-04-25 13:54:13
    1. 存储过程概念存储过程 (Stored Procedure) 是在大型数据库系统中 , 一组为了完成特定功能的 SQL 语句集 , 存储在数据库中 , 经过第一次编译后再次调用不需要再次编译 , 用户通过指定存储过程的名字并给出参数 ...
  • 存储过程

    2015-08-25 14:36:17
    存储过程具有名称,参数返回值,并且可以嵌套调用。 二、分类:系统存储过程、扩展存储过程、用户自定义存储过程 三、优点:快速执行、安全性好、访问统一、命名代码,允许延迟绑定、减少网络通信流量 四、存储...
  • 一、存储过程概念 T-SQl和C语言一样 ,是一门结构化的语言。 什么是存储过程?  存储过程是SQL查询语句与控制流程语句的预编译集合,并以特定的名称保存在数据库中。存储过程也是数据库对象 分类: ...
  • Java面试题30 :存储过程优点提前预告,完全免费,写文不易: 如果喜欢、对你有所帮助还请大家点个在看, 好东西要大家共享才能实现它的价值 , 让更多有需要的人看到,如果可以的话...
  • 存储过程及触发器

    千次阅读 2018-12-08 15:47:17
    数据库原理应用A实验报告 实验名称: 数据定义于数据操作 实验类型: 设计型实验 指导教师: 陈俊 专业班级: 软件 02 姓 名: ** 学 号: 51****05 实验地点: 东6E501 ...了解存储过程概念优点 ...
  • 存储过程很类似,用户自定义函数是一组有序的T_SQL语句,这些语句被预先优化和编译,并且可以作为一个单元来进行调用。UDF和存储过程的主要区别在于结果的返回方式。为了能支持多种的不同的返回值,UDF比存储过程...
  • 重庆电子工程职业学院授课方案教案 课名 教师 班级 编写时间 课题存储过程 教学目的要求 了解存储过程含义优点和类型 掌握存储过程的创建和执行 教学重点 掌握存储过程的创建和执行 教学难点 掌握存储过程中输入...
  • 1、存储过程概念 存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次调用编译后,再次调用不需要编译。用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数) 来执行它 , 存储...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 190,818
精华内容 76,327
关键字:

存储过程的概念及优点