搜尋
首頁php教程PHP开发SQL之預存程序

SQL之預存程序

Dec 14, 2016 pm 03:19 PM

1:定義

      預存程序(stored procedure)是一組為了完成特定功能的SQL語句集合,經編譯後儲存在伺服器端的資料庫中,利用預存程序可以加速SQL語句的執行。

      儲存程序分為系統儲存程序與自訂預存程序。

        *系統儲存過程在master資料庫中,但在其他的資料庫中可以直接調用,且在呼叫時不必在儲存過程前加上資料庫名,因為在建立新資料庫時,系統儲存過程

     的資料庫中會自動建立

         *自訂儲存過程,由使用者建立並能完成某一特定功能的儲存過程,且儲存過程既可以有參數又有回傳值,但是它與函數不同,儲存過程的回傳值只是指明執行是否成功,

          並不能直接像函數調用,而只能利用execute來執行預存程序。
收到且資料庫專業人員可以隨時對預存程序進行

修改,且對程式原始碼沒有影響,這樣就極大的提高了程式的可移植性。


       *可以更有效的管理使用者操作資料庫的權限:在Sql Server資料庫中,系統管理員可以透過對執行某一儲存程序的權限進行限制,從而實現對對應的資料存取進行控制,

避免非授權使用者對資料庫的訪問,確保資料的安全。

        *可以提高SQL的速度,而預存程序是編譯過的,如果某一作業包含大量的SQL程式碼或分別執行多次,那麼使用預存程序比直接使用單句SQL執行速度快的多語句。

         *減輕伺服器的負擔:當使用者的操作是針對資料庫物件的操作時,如果使用單一呼叫的方式,那麼網路上也必須傳送大量的SQL語句,如果使用預存程序,

 則直接傳送過程的呼叫指令即可,降低了網路的負擔。

3:建立預存程序

   SQL Server建立預存程序:


      create procedure 

         @parameter      參數類型   


         。 。 。

          as 

          begin

          end


          執行存儲過程:execute 過程名

  Oracle創建存儲過程:

           create procedure     過程名

           parameter  in|out|in out   參數類型


              .......

           parameter  in|out|in out   參數類型

              ........

            as 


            begin

                 命令行或者命令塊

                 exception


                 命令行或指令區塊

             姓名中含有」張「字職工資訊及其所在的倉庫訊息,

create procedure pro_sql5  
as  
begin  
   select * from 职工 where 姓名 like '%张%'  
   select * from 仓库 where 仓库号 in(select 仓库号 from 职工 where 姓名 like '%张%')  
end  
  
go  
execute pro_sql5

SQL之預存程序

6:带有输入参数的存储过程

     找出三个数字中的最大数:

create proc proc_sql6  
@num1 int,  
@num2 int,  
@num3 int  
as  
begin  
   declare @max int  
   if @num1>@num2    
      set @max = @num1  
   else set @max = @num2  
     
   if @num3 > @max  
      set @max = @num3  
        
   print '3个数中最大的数字是:' + cast(@max as varchar(20))  
end
execute proc_sql6 15, 25, 35

  3个数中最大的数字是:35


7:求阶乘之和 如6! + 5! + 4! + 3! + 2! + 1

alter proc proc_sql7  
   @dataSource int  
as  
begin  
   declare @sum int, @temp int, @tempSum int  
   set @sum = 0  
   set @temp = 1  
   set @tempSum = 1  
   while @temp <= @dataSource  
      begin  
         set @tempSum = @tempSum * @temp  
         set @sum = @sum + @tempSum  
         set @temp = @temp + 1  
     end  
   print cast(@dataSource as varchar(50)) + &#39;的阶乘之和为:&#39; + cast(@sum as varchar(50))  
end
execute proc_sql7 6

6的阶乘之和为:873



8:带有输入参数的数据查询功能的存储过程

create proc proc_sql8   
  @mingz int,  
  @maxgz int  
as  
begin  
   select * from 职工 where 工资>@mingz and 工资<@maxgz  
end
execute proc_sql8 2000,5000

   SQL之預存程序

9:带输入和输出参数的存储过程:显示指定仓库号的职工信息和该仓库号的最大工资和最小工资

create proc proc_sql9  
  @cangkuhao varchar(50),  
  @maxgz int output,  
  @mingz int output  
as  
begin  
  select * from 职工 where 仓库号=@cangkuhao  
  select @maxgz=MAX(工资) from 职工 where 仓库号=@cangkuhao  
  select @mingz=MIN(工资) from 职工 where 仓库号=@cangkuhao  
end
declare @maxgz int, @mingz int  
execute proc_sql9 &#39;wh1&#39;, @maxgz output, @mingz output  
select @maxgz as 职工最大工资, @mingz as 职工最小工资

SQL之預存程序

10:带有登录判断功能的存储过程

create proc proc_sql10  
 @hyuer varchar(50),  
 @hypwd varchar(50)  
as  
begin  
  if @hyuer = &#39;hystu1&#39;  
     begin  
         if @hypwd = &#39;1111&#39;  
            print &#39;用户名和密码输入正确&#39;  
         else   
            print &#39;密码输入错误&#39;  
     end  
  else if @hyuer = &#39;hystu2&#39;  
     begin  
          if @hypwd = &#39;2222&#39;  
            print &#39;用户名和密码输入正确&#39;  
         else   
            print &#39;密码输入错误&#39;  
     end  
  else if @hyuer = &#39;hystu3&#39;  
     begin  
           if @hypwd = &#39;3333&#39;  
            print &#39;用户名和密码输入正确&#39;  
         else   
            print &#39;密码输入错误&#39;  
     end  
  else   
      print &#39;您输入的用户名不正确,请重新输入&#39;  
end
execute proc_sql10 &#39;hystu1&#39;, &#39;11&#39;

密码输入错误



11:带有判断条件的插入功能的存储过程

create proc proc_sq111  
 @zghao varchar(30),  
 @ckhao varchar(30),  
 @sname varchar(50),  
 @sex varchar(10),  
 @gz int  
as  
begin  
  if Exists(select * from 职工 where 职工号=@zghao)  
     print &#39;该职工已经存在,请重新输入&#39;  
  else   
     begin  
        if Exists(select * from 仓库 where 仓库号=@ckhao)  
           begin  
              insert into 职工(职工号, 仓库号, 姓名, 性别, 工资)   
                           values(@zghao, @ckhao, @sname, @sex, @gz)  
           end  
        else  
           print &#39;您输入的仓库号不存在,请重新输入&#39;  
     end  
end
execute proc_sq111 &#39;zg42&#39;, &#39;wh1&#39;, &#39;张平&#39;, &#39;女&#39;, 1350

12: 创建加密存储过程

create proc proc_enerypt  
with encryption  
as  
begin  
  select * from 仓库  
end

所谓加密存储过程,就是将create proc 语句的原始文本转换为模糊格式,模糊代码的输出在SQL Server的任何目录视图中都能直接显示


13: 查看存储过程和功能代码信息

select name, crdate from sysobjects where type=&#39;p&#39;

SQL之預存程序

查看指定存储过程的属性信息:

execute sp_help proc_sql1

SQL之預存程序

查看存储过程所使用的数据对象的信息

execute sp_depends proc_sql2

SQL之預存程序

查看存储过程的功能代码

execute sp_helptext proc_sql9


14:重命名存储过程名

    execute sp_rename 原存储过程名, 新存储过程名


15:删除存储过程

    drop 过程名


 带有判断条件的删除存储过程

if Exists(select * from dbo.sysobjects where name=&#39;proc_sql6&#39; and xtype=&#39;p&#39;)  
   begin  
      print &#39;要删除的存储过程存在&#39;  
        drop proc proc_sq16  
      print &#39;成功删除存储过程proc_sql6&#39;  
   end  
else  
    print &#39;要删除的存储过程不存在&#39;

16:存储过程的自动执行

      使用sp_procoption系统存储过程即可自动执行一个或者多个存储过程,其语法格式如下:

      sp_procoption [@procName=] 'procedure', [@optionName=] 'option', [@optionValue=] 'value'

      各个参数含义如下:

         [@procName=] 'procedure': 即自动执行的存储过程

         [@optionName=] 'option':其值是startup,即自动执行存储过程

         [@optionValue=] 'value':表示自动执行是开(true)或是关(false)

sp_procoption @procName=&#39;masterproc&#39;, @optionName=&#39;startup&#39;, @optionValue=&#39;true&#39;

利用sp_procoption系统函数设置存储过程masterproc为自动执行



17:监控存储过程

      可以使用sp_monitor可以查看SQL Server服务器的各项运行参数,其语法格式如下:

     sp_monitor

     该存储过程的返回值是布尔值,如果是0,表示成功,如果是1,表示失败。该存储过程的返回集的各项参数的含义如下:

      *last_run: 上次运行时间

      *current_run:本次运行的时间

      *seconds: 自动执行存储过程后所经过的时间

      *cpu_busy:计算机CPU处理该存储过程所使用的时间

      *io_busy:在输入和输出操作上花费的时间

       *idle:SQL Server已经空闲的时间

       *packets_received:SQL Server读取的输入数据包数

       *packets_sent:SQL Server写入的输出数据包数

        *packets_error:SQL Server在写入和读取数据包时遇到的错误数

        *total_read: SQL Server读取的次数

         *total_write: SQLServer写入的次数

         *total_errors: SQL Server在写入和读取时遇到的错误数

          *connections:登录或尝试登录SQL Server的次数

SQL之預存程序

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),