存儲過程介紹
㈠ 什麼是存儲過程
sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。所以效率會高 一 存儲過程介紹 存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化 後存儲在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯系的過程可以組合在一起構成程序包。 使用存儲過程有以下的優點: * 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可 以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。 * 可保證數據的安全性和完整性。 # 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取數據 庫,從而保證數據的安全。 # 通過存儲過程可以使相關的動作在一起發生,從而可以維護數據 庫的完整性。 * 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執 行。 * 可以降低網路的通信量。 * 使體現企業規則的運算程序放入資料庫伺服器中,以便: # 集中控制。 # 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改 任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運 算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序 工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可 以了,應用程序無須任何變化。 不同資料庫存儲過程的寫法不一,在後面的講座中將分別介紹ORACLE 和SYBASE存儲過程的用法。 二 ORACLE 的存儲過程 ORACLE 創建存儲過程的語法為: create [or replace] procere 過程名 參數1 [in|out|in out] 數據類型 [,參數2 [in|out|in out] 數據類型]... pl/sql 語句 下面舉例說明ORACLE資料庫存儲過程的寫法和用法。 可以建立一個存儲過程,每當用戶修改資料庫的重要數據時,即把 用戶的用戶名、掌諍筒僮骼嘈圖鍬枷呂矗?nbsp; create procere update_log is begin insert into update_log_tab(use_name,update_date,operation) values(user,sysdate,'update' end; 可以在恰當的位置調用這個存儲過程來記錄用戶對表的修改。例如下面在 表sal_comm上建立一個修改觸發器,每當用戶修改此表後,用戶的名稱、修改 時間和操作即被記錄在了表update_log_tab中: create trigger audit_update after update on sal_comm for each row begin update_log end --三 Sybase的存儲過程 盡管Sybase存儲過程的功能和寫法與ORACLE類似,但他們之間還是 有一定的差別。下面講述SYBASE的存儲過程。 SYBASE可以用CREATE PROCere命令生成存儲過程: CREATE PROCere 存儲過程名 [;number] [[(] @parameter_name datatype [=default] [OUTput] [, @parameter_name datatype [=default] [OUTput]]...[)]] [WITH RECOMPILE] AS SQL_statements 下面是一個查詢作者編碼、名稱和生日的存儲過程: create proc p_auths @author_code varchar(10) as select author_code, name, birthdate from auths where author_code=@author_code 下面執行過程p_auths: p_auths @author_code=A00001 在CREATE PROC語句中,可以為參數賦預設值,該值可以是任何常量。 當用戶不提供參數值時,該值便作為參數值提供給過程。
㈡ 儲存過程的類型有哪些
問題一:存儲過程的種類 1系統存儲過程以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作。2本地存儲過程用戶創建的存儲過程是由用戶創建並完成某一特定功能的存儲過程,事實上一般所說的存儲過程就粗肢螞是指本地存儲過程。3臨時存儲過程分為兩種存儲過程:一是本地臨時存儲過程,以井字型大小(#)作為其名稱的第一個字元,則該存儲過程將成為一個存放在tempdb資料庫中的本地臨時存儲過程,且只有創建它的用戶才能執行它;二是全局臨時存儲過程,以兩個井字型大小(##)號開始,則該存儲過程將成為一個存儲在tempdb資料庫中的全局臨時存儲過程,全局臨時存儲過程一旦創建,以後連接到伺服器的任意用戶都可以執行它,而且不需要特定的許可權。4遠程存儲過程在SQL Server2005中,遠程存儲過程(Remote Stored Proceres)是位於遠程伺服器上的存儲過程,通常可以使用分飢李布式查詢和EXECUTE命令執行一個遠程存儲過程。5擴展存儲過程擴展存儲過程(Extended Stored Proceres)是用戶岩埋可以使用外部程序語言編寫的存儲過程,而且擴展存儲過程的名稱通常以xp_開頭。
問題二:sql,server中的存儲過程有幾種類型 》系統過程,用戶過程;
》內部過程,擴展存貯過程(外部dll)
問題三:SQL Server2005中存儲過程的類型有哪些 10分 存儲過程是指封裝了可重用代碼的模塊或常式。存儲過程可以接受輸入參數、向客戶端返回表格或標量結果和消息、調用數據定義語言 (DDL) 和數據操作語言 (DML) 語句,然後返回輸出參數。在 SQL Server 2005 中,存儲過程有兩種類型:Transact-SQL 或 CLR。
Transact-SQL
Transact-SQL 存儲過程是指保存的 Transact-SQL 語句 *** ,可以接受和返回用戶提供的參數。例如,存儲過程中可能包含根據客戶端應用程序提供的信息在一個或多個表中插入新行所需的語句。存儲過程也可能從資料庫向客戶端應用程序返回數據。
CLR
CLR 存儲過程是指對 Microsoft .NET Framework 公共語言運行時 (CLR) 方法的引用,可以接受和返回用戶提供的參數。它們在 .NET Framework 程序集中是作為類的公共靜態方法實現的。
問題四:sql server存儲過程的參數有哪些類型 int,char,nchar,nvarchar,varchar,text,date,time,datetime,bit,bool……
問題五:sql server存儲過程的參數有哪些類型 SQL Server存儲過程是SQL資料庫的重要組成部分,其中可以用到許多參數。在SQL Server存儲過程中,支持輸入(Input)、輸出參數(Output),也支持返回值參數(ReturnValue)。
返回值參數不是一個形參,而類似於編程中的返回值類型。它都是通過Return語句來返回的,而且在SQL Server中,必須返回INT型的數據,而且很顯然,只能有一個返回值,因為RETURN語句其實是會終止SQL Server存儲過程的。
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ALTER PROCEDURE [dbo].[GetCustomers]
(@rowcount INT OUTPUT)
AS
SELECT [CustomerID]
,[panyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM [Northwind].[dbo].[Customers]
SET @rowcount=
rowcount
問題六:在SQL中存儲過程的一般語法是什麼? sql server存儲過程語法
存儲過程就是作為可執行對象存放在資料庫中的一個或多個SQL命令。
定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在資料庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同資料庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利於SQL語句的重用。
在ASP中,一般通過mand對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在於講述T-SQL語法,所以存儲過程只給出代碼,不作說明):
/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go
以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過mand對象調用該存儲過程的ASP代碼如下:
'**通過mand對象調用存儲過程**
DIM Mym,MyRst
Set Mym = Server.CreateObject(ADODB.mand)
Mym.ActiveConnection = MyConStr 'MyConStr是資料庫連接字串
Mym.mandText = getUserList '指定存儲過程名
Mym.mandType = 4 '表明這是一個存儲過程
Mym.Prepared = true '要求將SQL命令先行編譯
Set MyRst = Mym.Execute
Set Mym = Nothing
存儲嘩程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,mandType屬性表明請求的類型,取值及說明如下:
-1 表明mandText參數的類型無法確定
1 表明mandText是一般的命令類型
2 表明mandText參數是一個存在的表名稱
4 表明mandText參數是一個存儲過程的名稱
還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:
'**通過Connection對象調用存儲過程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject(&qu......>>
問題七:商品在儲存過程中的變化形式有哪些 在商品交換發展的歷史過程中,隨著商品交換從偶然的行為逐步擴大成為經濟生活中的重要環節,商品的價值形式也逐步發展。從簡單的、個別的或偶然的價值形式,發展到總和的或擴大的價值形式,再發展到一般價值形式,最後發展到貨幣形式。 商品是使用價值和價值的統一。商品的使用價值是實實在在的,是看得見、摸得著的。米、布、房屋、自行車等等各種商品體的自然形態,體現著各種不同的使用價值,這是一目瞭然的。商品的價值實體是物化在商品中的一般人類勞動,與使用價值不同,商品的這種價值實體是看不見、摸不著的。即使把一件商品拆得粉碎,也找不到價值的任何影跡。這是因為,價值純粹是商品的社會屬性。價值實體雖然是已經消耗的勞動力即勞動,但並不是任何生產物質產品的勞動都會形成價值。只有當勞動產品成了供交換即供他人使用的商品,物化在商品中的勞動,才需要互相比較,才需要撇開其特殊的有用性質而把它看作無差別的一般人類勞動即抽象勞動。勞動產品轉化為商品和消耗在產品生產中的勞動轉化為價值,都是特定的社會關系的表現。價值既然純粹是商品的社會屬性,從商品體的自然形態中,當然無法找到它的影蹤,而只有從價值關系即商品與商品交換的社會關系中,才能探索它的存在。 當兩種商品互相交換,例如商品A與商品B相交換的時候,A、B兩種商品就發生了等價關系。在商品交換中,任何一方都不願吃虧。盡管在每個個別的交換行為中,由於各種各樣的原因,交換的一方吃虧、另一方佔便宜的事會經常發生;但從整體看,從長期趨勢看,商品交換必然是價值量相等的交換。例如,1件上衣同20碼麻布相交換,是因為 1件上衣和20碼麻布,在生產中耗費了等量的勞動,具有等量的價值。在這一商品交換關系中,20碼麻布是 1件上衣的交換價值。上衣的價值從上衣本身雖然看不出來,但它一旦同麻布交換,與麻布發生了價值關系,上衣的價值就可以從麻布上面表現了出來。商品的價值關系表明,價值是交換價值的內容,交換價值是商品價值的形式。在人類歷史中,隨著商品交換的發展,商品的價值形式也隨之變化和發展。
問題八:SQL的存儲過程 語法格式是什麼? ---判斷是否存在存儲過程
if exists( select name from sysobjects where name='proc_name' )
drop proc proc_name
go
---創建存儲過程
create proc proc_name
@parameter varchar(20),
@parameter2 int
as
主體語句
go
if exists:判斷是否存在
drop proc : 刪除存儲過程,後面接存儲過程名稱,名稱不用引起來
create proc: 創建存儲過程,後面接存儲過程名稱,名稱不用引起來
@parameter varchar(20): 參數,在執行存儲過程的時候需要傳入的參數,這里是字元類型,如果有多個參數的話,除了最後一個參數,其他的參數後面需要加逗號(英文狀態),如果不需要傳入,直接去掉就行了。
create proc proc_name
as
主體語句
go
as : 關鍵字
主體語句:就是你要做的操作的語句,和平時的完全一樣,存儲過程就相當把平時的sql語句在外面加了個殼的感覺。比如這里你需要查詢一個表 select * from tableName1 那麼這里就這樣寫
create proc proc_name
as
select * from tableName1
go
傳參數:
create proc proc_name
@parameter varchar(20)
as
select * from tableName where [email protected]
go
執行的時候這樣
exec proc_name '小明'
其他的操作都是這樣的。
希望對你有幫助
問題九:外存主要有哪些類型 外儲存器是指除計算機內存及CPU緩存以外的儲存器,此類儲存器一般斷電後仍然能保存數據。常見的外儲存器有硬碟、軟盤、光碟、U盤等。
問題十:存儲過程傳的參數是list,應該用什麼類型接受 看下這個吧。
bbs.csdn/topics/390094413
有代碼
㈢ 什麼是資料庫的儲存過程~~
存儲過程就好象一個批處理文件一樣,你可以在裡面執行很多的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 procere procee_name
[@parameter data_type][output]
[with]{recompile|encryption}
as
sql_statement
解釋:
output:表示此參數是可傳回的
with {recompile|encryption}
recompile:表示每次執行此存儲過程時都重新編譯一次
encryption:所創建的存儲過程的內容會被加密
如:
表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:設有兩個表為Proct,Order,其表內容如下:
Proct
產品編號 產品名稱 客戶訂數
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 Proct a inner join Order b on a.產品編號=b.產品編號
if @@error=0
print 'Good'
else
&n bsp; print 'Fail'
go
存儲過程介紹
一、先介紹一下什麼是存儲過程
存儲過程是利用SQL Server所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的Pro-SQL和Informix的資料庫系統能夠中的Informix-4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數
二、存儲過程的書寫格
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名 數據類型 [VARYING] [=內定值] [OUTPUT]
每個參數名前要有一個「@」符號,每一個存儲過程的參數僅為該程序內部使用,參數的類型除了IMAGE外,其他SQL Server所支持的數據類型都可使用。
[=內定值]相當於我們在建立資料庫時設定一個欄位的默認值,這里是為這個參數設定默認值。[OUTPUT]是用來指定該參數是既有輸入又有輸出值的,也就是在調用了這個存儲過程時,如果所指定的參數值是我們需要輸入的參數,同時也需要在結果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數用,可以用CURSOR,同時在使用該參數時,必須指定VARYING和OUTPUT這兩個語句。
例子:
CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
SELECT @p_tot = sum(Unitprice*Quantity)
FROM orderdetails
WHERE ordered=@o_id
例子說明:
該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據用戶輸入的定單ID號碼(@o_id),由定單明細表(orderdetails)中計算該定單銷售總額[單價(Unitprice)*數量(Quantity)],這一金額通過@p_tot這一參數輸出給調用這一存儲過程的程序
三、在SQL Server中執行存儲過程
在SQL Server的查詢分析器中,輸入以下代碼:
declare @tot_amt int
execute order_tot_amt 1,@tot_amt output
select @tot_amt
以上代碼是執行order_tot_amt這一存儲過程,以計算出定單編號為1的定單銷售金額,我們定義@tot_amt為輸出參數,用來承接我們所要的結果
sql語句執行的時候要先編譯,然後執行。存儲過程就是編譯好了的一些sql語句。用的時候直接就可以用了。
存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化 後存儲在資料庫伺服器中,使用時只要調用即可。在ORACLE中,若干個 有聯系的過程可以組合在一起構成程序包。
使用存儲過程有以下的優點:
* 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可 以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的 運算。
* 可保證數據的安全性和完整性。
# 通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。
# 通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
* 再運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出 了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。 由於執行SQL語句的大部分工作已經完成,所以存儲過程能以極快的速度執 行。
* 可以降低網路的通信量。
* 使體現企業規則的運算程序放入資料庫伺服器中,以便:
# 集中控制。
# 當企業規則發生變化時在伺服器中改變存儲過程即可,無須修改 任何應用程序。企業規則的特點是要經常變化,如果把體現企業規則的運 算程序放入應用程序中,則當企業規則發生變化時,就需要修改應用程序 工作量非常之大(修改、發行和安裝應用程序)。如果把體現企業規則的 運算放入存儲過程中,則當企業規則發生變化時,只要修改存儲過程就可 以了,應用程序無須任何變化。
㈤ 什麼是存儲過程Sql 存儲過程知識詳解
存儲過程的好處: 1.由於資料庫執行動作時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。 2.一個存儲過程在程序在網路中交互時可以替代大堆的T-SQL語句,所以也能降低網路的通信量,提高通信速率。 3.通過存儲過程能夠使沒有許可權的用戶在控制之下間接地存取資料庫,從而確保數據的安全。 小結:總之存儲過程是好東西,在做項目時屬於必備利器,下面介紹存儲過程的基本語法。存儲過程的語法和參數講解存儲過程的一些基本語法:--------------創建存儲過程----------------- CREATE PROC [ EDURE ] procere_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ] --------------調用存儲過程----------------- EXECUTE Procere_name '' --存儲過程如果有參數,後面加參數格式為:@參數名=value,也可直接為參數值value --------------刪除存儲過程----------------- drop procere procere_name --在存儲過程中能調用另外一個存儲過程,而不能刪除另外一個存儲過程
㈥ 什麼是存儲過程有什麼優點
存儲過程是事先經過編譯並存儲在資料庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。
優點:
1、重復使用:存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量:存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
(6)存儲過程介紹擴展閱讀:
存儲過程的缺點:
1、更改比較繁瑣:如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣。
2、可移植性差:由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則需要將業務邏輯封裝在不特定於 RDBMS 的中間層中。