1. 程式人生 > >Stored Procedure儲存過程基礎知識詳解

Stored Procedure儲存過程基礎知識詳解

儲存過程是做專案的必備技術,只要你面試找工作,資料庫及儲存過程也是必考的,下面一起來了解儲存過程的簡單基本技術知識:
一、儲存過程基本概念?
儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句,它是由一些T-SQL語句組成的程式碼塊,這些T-SQL語句程式碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然後再給這個程式碼塊取一個名字,在用到這個功能的時候呼叫他就行了。


二、為何要用儲存過程?
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行復雜操作時,可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權


三、建立儲存過程的引數:
1.procedure_name :儲存過程的名稱,在前面加#為區域性臨時儲存過程,加##為全域性臨時儲存過程。


2.number:是可選的整數,用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應用程式使用的過程可以命名為 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 語句將除去整個組。如果名稱中包含定界識別符號,則數字不應包含在識別符號中,只應在 procedure_name 前後使用適當的定界符。 



[email protected]: 儲存過程的引數。可以有一個或多個。使用者必須在執行過程時提供每個所宣告引數的值(除非定義了該引數的預設值)。儲存過程最多可以有 2.100 個引數。 
使用 @ 符號作為第一個字元來指定引數名稱。引數名稱必須符合識別符號的規則。每個過程的引數僅用於該過程本身;相同的引數名稱可以用在其它過程中。預設情況下,引數只能代替常量,而不能用於代替表名、列名或其它資料庫物件的名稱。有關更多資訊,請參見 EXECUTE。 


4.data_type:引數的資料型別。所有資料型別(包括 text、ntext 和 image)均可以用作儲存過程的引數。不過,cursor 資料型別只能用於 output 引數。如果指定的資料型別為 cursor,也必須同時指定 VARYING 和 OUTPUT 關鍵字。有關 SQL Server 提供的資料型別及其語法的更多資訊,請參見資料型別。 

說明 對於可以是 cursor 資料型別的輸出引數,沒有最大數目的限制。 


5.varying: 指定作為輸出引數支援的結果集(由儲存過程動態構造,內容可以變化)。僅適用於遊標引數。 


6.default: 引數的預設值。如果定義了預設值,不必指定該引數的值即可執行過程。預設值必須是常量或 NULL。如果過程將對該引數使用 LIKE 關鍵字,那麼預設值中可以包含萬用字元(%、_、[] 和 [^])。


7.output :表明引數是返回引數。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 引數可將資訊返回給呼叫過程。Text、ntext 和 image 引數可用作 OUTPUT 引數。使用 OUTPUT 關鍵字的輸出引數可以是遊標佔位符。 


8.recompile: 表明 SQL Server 不會快取該過程的計劃,該過程將在執行時重新編譯。在使用非典型值或臨時值而不希望覆蓋快取在記憶體中的執行計劃時,請使用 RECOMPILE 選項。


9.encryption: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文字的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 複製的一部分發布。 說明 在升級過程中,SQL Server 利用儲存在 syscomments 中的加密註釋來重新建立加密過程。 


10.for replication :指定不能在訂閱伺服器上執行為複製建立的儲存過程。.使用 FOR REPLICATION 選項建立的儲存過程可用作儲存過程篩選,且只能在複製過程中執行。本選項不能和 WITH RECOMPILE 選項一起使用。 


11.as :指定過程要執行的操作。


12.sql_statement :過程中要包含的任意數目和型別的 Transact-SQL 語句。但有一些限制。




四、如何使用儲存過程?
以下通過表student來了解儲存過程:

無引數儲存過程:
選出student表中的所有資訊,

create proc StudentProc
as --此處 as 不可以省略不寫
begin --begin 和 end 是一對,不可以只寫其中一個,但可以都不寫
select id,name,age,sex from student
end
go


有引數儲存過程:
全域性變數
全域性變數也稱為外部變數,是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。
選出指定姓名的學生資訊:


create proc StudentProc
@name varchar(50) 
as 
begin
select id,name,age,sex from student where [email protected]
end
go


exec StudentProc'張三' --執行語句


上面是在外部給變數賦值,也可以在內部直接給變數設定預設值


create proc StudentProc
@name varchar(50)='張三'
as 
begin
select id,name,age,sex from student where [email protected]
end
go
exec StudentProc


也可以把變數的內容輸出,使用output


create proc StudentProc
@name varchar(50),
@IsRight int output --傳出引數
as 
if exists (select id,name,age,sex from student where [email protected])
set @IsRight =1
else
set @IsRight=0
go


declare @IsRight int 
exec StudentProc'張三' , @IsRight output
select @IsRight


以上是全域性變數,下面來了解區域性變數
區域性變數也稱為內部變數。區域性變數是在函式內作定義說明的。其作用域僅限於函式內部,離開該函式後再使用這種變數是非法的。
區域性變數的定義:必須先用Declare命令定以後才可以使用,declare{@變數名 資料型別}
區域性變數的賦值方法:set{@變數名=表示式}或者select{@變數名=表示式}
區域性變數的顯示:select @變數名


create proc StudentProc
as 
declare @name varchar(50)
set @name='張三'
select id,name,age,sex from student where [email protected]
go


exec StudentProc


那如果是要把區域性變數的資料顯示出來怎麼辦呢?


create proc StudentProc
as 
declare @name varchar(50)
set @sname=(select name from student where id=1)
select @name
go


exec StudentProc



相關推薦

Stored Procedure儲存過程基礎知識

儲存過程是做專案的必備技術,只要你面試找工作,資料庫及儲存過程也是必考的,下面一起來了解儲存過程的簡單基本技術知識:一、儲存過程基本概念?儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句,它是由一些T-

Hibernate基礎知識

seq 每次 事務 name rep cfg 默認 poj 產生 一、Hibernate框架 Hibernate是一個開放源代碼的對象關系映射框架,它對 JDBC進行了非常輕量級的對象封裝,它將POJO類與數據庫表建立映射關系,是一個 全自動的ORM框架

JAVA 類和對象基礎知識

默認 抽象 實現 面向對象 nbsp 分組 sed fcc closed /*文章中用到的代碼只是一部分,需要源碼的可通過郵箱聯系我 [email protected]*/ 和C++一樣,JAVA也是一門面向對象的語言,其基礎和核心是類和對象。而面向對象的思想是來源與顯示生

HTTP服務相關基礎知識

gen 註冊表 關閉 return 我們 不同ip地址 跳轉 http請求 mime類型 1 HTTP服務 1.1 IP/PV/UV UV、PV=1:5關系 UV 每天訪問人數PV page view 頁面瀏覽量 通過nginx日誌統計UV PV 或通過代碼統計 ?

動態路由協議RIP,OSPF基礎知識,以及配置實驗驗證

多個 shadow star 下一跳 tle water 外交 協議 使用 動態路由:不需要手工寫路由,將各自的直連網段宣告出去,路由器之間就可以相互學習,如果路由表有變化則及時更新宣告給相鄰的路由器靜態路由 優點:精確轉發,由管理員手動控制 缺點:靈活性差動態路由特點

RabbitMQ基礎知識

bmc vhost 完成 rdquo 限流 接收消息 服務器 廣播 lazy 什麽是MQ? MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。MQ是消費-生產者模型的一個典型的代表,一端往消息隊列中不斷寫入消息,而另

SQL與NoSQL資料庫入門基礎知識

SQL與NoSQL資料庫入門基礎知識詳解 這幾年的大資料熱潮帶動了一激活了一大批hadoop學習愛好者。有自學hadoop的,有報名培訓班學習的。所有接觸過hadoop的人都知道,單獨搭建hadoop裡每個組建都需要執行環境、修改配置檔案測試等過程。對於我們這些入門級新手來說簡直每個都是坑。

JSP基礎知識

一、JSP基礎語法     1、JSP簡介        JSP(Java Server Pages),其根本是一個簡化的Servlet設計,它實現了在Java中使用HTML標籤。JSP是一種動態網頁技術標準,也是JavaEE的標準。JSP和Servlet一樣,是在伺

Oracle 基礎知識

DDL : 資料庫模式定義語言,關鍵字:createDML : 資料操縱語言,關鍵字:Insert、delete、updateDCL : 資料庫控制語言 ,關鍵字:grant、removeDQL : 資料庫查詢語言,關鍵字:select結構化查詢語言 (Structured

Unity3D開發基礎知識

本文簡介 物體操作 例項化 網路相關 網路協議 TCP UDP 程式碼怎麼寫 本文簡介        本文旨在總結之前的部落格,因為之前的部落格比較零散,對於各個模組之間劃分不夠清晰,在此部落格進行總結歸納,並且附上最新遇到

Thrift入門初探(2)--thrift基礎知識

  Thrift使用一種中間語言IDL,來進行介面的定義,下面來具體講一下IDL可定義的幾種常用資料型別和關鍵字. 常用資料型別及關鍵字   基本型別     thrift不支援無符號的型別,無符號型別可以簡單理解為不能表示負數,只能表示正數的型別,像java的基本資料型別都是有符號的型別. byte:

Oracle 11g RAC 基礎知識

    Infiniband常被用來實現遠端記憶體直接訪問(RDMA remote direct memory access architecture)。這是一個高速互聯,常與高效能運算(HPC)環境聯絡在一起。RDMA可以在叢集的節點間使用並行、直接、記憶體到記憶體的傳輸,它需要專門的RDMA介面卡、交換

奧塔線上:基於token認證的基礎知識

一、    什麼是TokenToken原始的意思是“令牌”,是服務端生成的一個自定義字串,作為客戶端進行資料請求的一個標識。在區塊鏈興起後,Token被賦予“代幣”或“通證”的含義,意思是一種可流通的加密數字權益證明。二、    Token的起源早在計算機網路剛興起時,Tok

路由器基礎知識

第一章  網路互聯           網路的根本目的非常簡單:方便人們交換所獲得的資訊。但是網路的應用需求非常複雜:有的使用者希望高頻寬,但並不要求很長的傳輸距離;有的使用者要求很長的距離,但對頻寬要求很低;有的對網路的可靠性要求較高,而另外一些則要求較低,等等。這些都導

ORACLE儲存過程基礎知識

   一. 概述   Oracle儲存過程開發的要點是:   • 使用Notepad文字編輯器,用Oracle PL/SQL程式語言寫一個儲存過程;   • 在Oracle資料庫中建立一個儲存過程;   • 在Oracle資料庫中使用SQL*Plus工具執行儲存過程;   

虛擬化技術基礎原理

虛擬化技術基礎原理詳解DISK : IO調度模式 CFQ deadline anticipatory NOOP/sys/block/<device>/queue/schedulerMemory: MMU TLB vm.swappiness={0..100},使用交換分區的

跨域問題相關知識(原生js和jquery兩種方法實現jsonp跨域)

syn con 加載 developer 兩種方法 ray exe 編寫 分組 1、同源策略 同源策略(Same origin policy),它是由Netscape提出的一個著名的安全策略。同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽

oracle DDL,DML,DCL, 基礎概念

aud ase class con ani 概念 ddl 數據庫狀態 修改 一、SQL語言,有兩個組成部分:   DML(data manipulation language):它們是SELECT、UPDATE、INSERT、DELETE,命令是用來對數據庫裏的數據進行操作

Mysql 存儲過程實例

ima 這一 har odi cat image 來講 過程 相同 存儲過程和函數是事先經過編譯並存儲在數據庫中的一段SQL語句的集合,存儲和和函數的區別在於函數必須有返回值,而存儲過程沒有,存儲過程的參數可以使用IN、OUT、INOUT類型,而函數的參數只能是IN類型。存

服務器基礎知識小韓

銳訊網絡小韓 服務器小韓 高防德勝機房小韓 一、什麽是服務器?簡單的說,服務器就是在網絡中為其他客戶機提供服務的計算機。服務器是計算機的一種,它是在網絡操作系統的控制下為網絡環境裏的客戶機提供(如PC) 共享資源(包括查詢、存儲、計算等)的高性能計算機,它的高性能主要體現在高速度的CPU 運算能力