zoukankan      html  css  js  c++  java
  • 带你快速了解“存储过程”的定义及优点

    “存储过程”的定义及优点

    存储过程

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

    存储过程介绍

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

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

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

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

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

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

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

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

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

    # 集中控制。

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

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

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

    CREATE PROC[EDURE] procedure_name [;number] 
    [
    {@parameter data_type}
    ][VARYING] [= default] [OUTPUT]
    ]
    [,...n]
    [WITH 
    {
    RECOMPILE 
    | ENCRYPTION 
    | RECOMPILE, ENCRYPTION
    }
    ]
    [FOR REPLICATION]
    AS
    sql_statement [...n]

     

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

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

    Create Proc select_del As 
    Delete tmp 

     

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

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

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

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

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

    fjdid(父结点编号) 

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

    dwmc(单位名称)

    CREATE proc search_dwmc @dwidold int,@dwmcresult varchar(100) output 
    as 
    declare @stop int
    declare @result varchar(80)
    declare @dwmc varchar(80)
    declare @dwid int
    set nocount on
    set @stop=1
    set @dwmc=""
    select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold 
    set @result=rtrim(@dwmc)
    if @dwid=0 
    set @stop=0
    while (@stop=1) and (@dwid<>0)
    begin
    set @dwidold=@dwid
    select @dwmc=dwmc,@dwid=convert(int,fjdid) from jtdw where id=@dwidold
    if @@rowcount=0 
    set @dwmc=""
    else
    set @result=@dwmc+@result
    if (@dwid=0) or (@@rowcount=0) 
    set @stop=0
    else
    continue
    end
    set @dwmcresult=rtrim(@result)

    使用exec pro-name [pram1 pram2.....]

    转自:http://tech.ccidnet.com/zt/guocheng/

  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/wangchunming/p/2278562.html
Copyright © 2011-2022 走看看