成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

【java學(xué)習(xí)】數(shù)據(jù)庫的存儲(chǔ)過程總結(jié)

Cobub / 3250人閱讀

摘要:在學(xué)習(xí)的時(shí)候,對(duì)象出現(xiàn)了一個(gè)數(shù)據(jù)庫存儲(chǔ)過程,對(duì)這一概念不是很了解。存儲(chǔ)過程的參數(shù)。所有數(shù)據(jù)類型包括均可以用作存儲(chǔ)過程的參數(shù)。指定作為輸出參數(shù)支持的結(jié)果集由存儲(chǔ)過程動(dòng)態(tài)構(gòu)造,內(nèi)容可以變化。使用選項(xiàng)創(chuàng)建的存儲(chǔ)過程可用作存儲(chǔ)過程篩選。

在學(xué)習(xí)JDBC的時(shí)候,CallableStatement對(duì)象出現(xiàn)了一個(gè)數(shù)據(jù)庫存儲(chǔ)過程,對(duì)這一概念不是很了解。所以就查閱相關(guān)資料,總結(jié)一下

什么是存儲(chǔ)過程?

根據(jù)百度百科的解釋,存儲(chǔ)過程是Store Procedure,是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL語句集,它存儲(chǔ)在數(shù)據(jù)庫中,經(jīng)過一次編譯后再次調(diào)用就不需要編譯了。

筆者認(rèn)為可以把它認(rèn)為是一個(gè)語言的方法,它也有存儲(chǔ)過程名、存儲(chǔ)過程參數(shù)、返回值。

我們通過指定存儲(chǔ)過程的名字并給出參數(shù)(如果帶的話)來執(zhí)行它。

存儲(chǔ)過程的設(shè)計(jì)規(guī)則

首先,我們已經(jīng)知道了,存儲(chǔ)過程是一系列sql語句的集合。我們可以通過存儲(chǔ)過程來創(chuàng)建其他數(shù)據(jù)庫對(duì)象。同時(shí)也可以在存儲(chǔ)過程中創(chuàng)建本地臨時(shí)表,或者引用本地臨時(shí)表。如果在存儲(chǔ)過程內(nèi)來創(chuàng)建本地臨時(shí)表的話,臨時(shí)表僅為存儲(chǔ)過程而存在,退出該存儲(chǔ)過程后,臨時(shí)表將消失。

存儲(chǔ)過程還可以調(diào)用另一個(gè)存儲(chǔ)過程,被調(diào)用的存儲(chǔ)過程可以訪問訪問

存儲(chǔ)過程中的參數(shù)的最大數(shù)目為 2100。

存儲(chǔ)過程中的局部變量的最大數(shù)目?jī)H受可用內(nèi)存的限制。

根據(jù)可用內(nèi)存的不同,存儲(chǔ)過程最大可達(dá) 128 MB

實(shí)現(xiàn)存儲(chǔ)過程
CREATE PROCEDURE Procedure_Name  

    --Procedure_Name為存儲(chǔ)過程名(不能以阿拉伯?dāng)?shù)字開頭),在一個(gè)數(shù)據(jù)庫中觸發(fā)器名是唯一的。名字的長(zhǎng)度不能超過個(gè)字。PROCEDURE可以簡(jiǎn)寫為PROC。
     
    @Param1 Datatype,@Param2 Datatype 
    
    --@Param1和@Param2為存儲(chǔ)過程的參數(shù),Datatype為參數(shù)類型,多個(gè)參數(shù)用逗號(hào)隔開,最多允許個(gè)參數(shù)。
    
AS --存儲(chǔ)過程要執(zhí)行的操作 

BEGIN
    
    --BEGIN跟END組成一個(gè)代碼塊,可以寫也可以不寫,如果存儲(chǔ)過程中執(zhí)行的SQL語句比較復(fù)雜,用BEGIN和END會(huì)讓代碼更加整齊,更容易理解。

    
    
END
GO --GO就代表結(jié)操作完畢  



exec Procedure_Name [參數(shù)名] --調(diào)用存儲(chǔ)過程Procedure_Name。

drop procedure Procedure_Name --刪除存儲(chǔ)過程Procedure_Name,不能在一個(gè)存儲(chǔ)過程中刪除另一個(gè)存儲(chǔ)過程,只能調(diào)用另一個(gè)存儲(chǔ)過程

show procedure status --顯示數(shù)據(jù)庫中所有存儲(chǔ)的存儲(chǔ)過程基本信息,包括所屬數(shù)據(jù)庫,存儲(chǔ)過程名稱,創(chuàng)建時(shí)間等

show create procedure Procedure_Name --顯示存儲(chǔ)過程Procedure_Name的詳細(xì)信息

exec sp_helptext Procedure_Name --顯示你這個(gè)Procedure_Name這個(gè)對(duì)象創(chuàng)建文本

更加詳細(xì)的內(nèi)容我們看下面:

CREATE PROC [ EDURE ] procedure_name [ ; number ]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]

[ WITH
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]
詳細(xì)說明參數(shù)

procedure_name:存儲(chǔ)過程的名稱,前面加#為局部存儲(chǔ)過程,加##全局存儲(chǔ)過程。

number:可選的參數(shù),用來對(duì)同名的過程分組,以便用一條DROP PROCEDURE語句即可將同組的過程一起去除。

如:名為orders的應(yīng)用程序使用的過程可以名為orderproc;1orderproc;2.使用DROP PROCEDURE orderproc語句將去除整個(gè)組。

@parameter:存儲(chǔ)過程的參數(shù)??梢杂幸粋€(gè)或者多個(gè)。用戶必須在執(zhí)行過程中提供每個(gè)所聲明參數(shù)的值(除非定義了該參數(shù)的默認(rèn)值)。存儲(chǔ)過程最多有2100個(gè)參數(shù)。

對(duì)于參數(shù)命名的規(guī)則:要用@符號(hào)作為第一個(gè)字符,參數(shù)名必須符合標(biāo)識(shí)符的規(guī)則。

data_type:參數(shù)的數(shù)據(jù)類型。所有數(shù)據(jù)類型(包括text、ntext、image)均可以用作存儲(chǔ)過程的參數(shù)。不過cursor數(shù)據(jù)類型只能用于OUTPU參數(shù)。如果指定數(shù)據(jù)類型為cursor,同事也必須指定VARYING和OUTPUT關(guān)鍵字。

5.VARYING:指定作為輸出參數(shù)支持的結(jié)果集(由存儲(chǔ)過程動(dòng)態(tài)構(gòu)造,內(nèi)容可以變化)。僅適用于游標(biāo)cursor參數(shù)

default:參數(shù)的默認(rèn)值。如果定義了默認(rèn)值,不必指定該參數(shù)的值就可以執(zhí)行過程。默認(rèn)值必須為常量或者是NULL。如果過程將該參數(shù)使用LIKE關(guān)鍵字,那么默認(rèn)值中可以包含通配符(%、_ 、[]和[^])。

OUTPUT:表明參數(shù)是返回參數(shù)。該選項(xiàng)的值可以返回給EXEC[UTE]。使用OUTPUT參數(shù)可以將信息返回給調(diào)用過程。Text、ntext和image參數(shù)可以用作OUTPUT參數(shù)。

RECOMPILE:表明SQL Server不會(huì)緩存該過程的計(jì)劃,該過程將在運(yùn)行時(shí)重新編譯,在使用非典型值或者臨時(shí)值而不希望緩存在內(nèi)存中執(zhí)行計(jì)劃時(shí),請(qǐng)使用RECOMPILE 選項(xiàng)

ENCRYPTION:表示SQL Server 加密syscomments表中包含CREATE PROCEDURE語句文本的條目。使用ENCRYPTION可以防止將過程作為SQL Server賦值的一部分發(fā)布。說明在升級(jí)過程中,Sql Server利用存儲(chǔ)在syscomments中的加密注釋來重新創(chuàng)建加密過程。

FOR REPLICATION:指定不能在訂閱服務(wù)器上執(zhí)行為復(fù)制創(chuàng)建的存儲(chǔ)過程。使用FOR REPLICATION選項(xiàng)創(chuàng)建的存儲(chǔ)過程可用作存儲(chǔ)過程篩選。

AS:指定過程要執(zhí)行的操作

sql_statement:過程中要包含的任意數(shù)目和類型的Transact-SQL語句。但有一些限制。

實(shí)例操作

現(xiàn)有一個(gè)Student表。

下面是無參存儲(chǔ)過程:
選出Student表中所有的信息:

create proc StuProc
as //此處as可省略不寫
begin//begin和end是一對(duì),不可以只寫一個(gè)
select S#,Sname,Sage,Ssex from student
end
go

有參數(shù)的存儲(chǔ)過程:

create proc StuProc
@sname varchar(100)
as
begin
select S#,Sname,Sage,Ssex from student where sname = @sname
end
go

exec StuProc "趙雷" //執(zhí)行語句

上面是在外部給變量賦值,也可以直接在內(nèi)部設(shè)置默認(rèn)值

create proc StuProc
@sname varchar(100) = "趙雷"
as
begin
select S#,Sname,Ssex from student where sname = @sname
end
go

exec StuProc

也可以把變量的內(nèi)容輸出,使用output

create proc StuProc
@sname varchar(100),
@IsRight int output//傳出參數(shù)
as
if exists(select s#,Sname,Sage,Ssex from student wheere sname = @sname)
set @IsRight = 1
else
set @IsRight = 0
go

declare @IsRight int
exec StuProc "趙雷",@IsRight output
select @IsRight
幾個(gè)問題

問:存儲(chǔ)過程在實(shí)際項(xiàng)目中用的多嗎?
答:凡事都有利有弊,存儲(chǔ)過程也是一樣。在商業(yè)數(shù)據(jù)庫應(yīng)用中,例如金融、企業(yè)、政府等等,存儲(chǔ)過程的使用非常廣泛,有多方面的原因,例如:存儲(chǔ)過程一旦調(diào)試完成通過后就能穩(wěn)定運(yùn)行,這與各個(gè)業(yè)務(wù)在一段時(shí)間內(nèi)是相對(duì)穩(wěn)定和確定是匹配的;存儲(chǔ)過程大大地減少了業(yè)務(wù)系統(tǒng)與數(shù)據(jù)庫的交互,一定程度降低了業(yè)務(wù)系統(tǒng)與數(shù)據(jù)庫的耦合,例如即使業(yè)務(wù)系統(tǒng)與應(yīng)用系統(tǒng)不在同一城市,對(duì)性能的影響也可控(100條SQL語句交互一次,即使延時(shí)由同城1ms增加到異地50ms,也只是增加49ms,如果交互100次,則增加4900ms)。在互聯(lián)網(wǎng)行業(yè),存儲(chǔ)過程很少使用,一個(gè)重要的原因是MySQL的廣泛使用,而MySQL的存儲(chǔ)過程的功能很弱(跟商業(yè)數(shù)據(jù)庫相比);另外也跟互聯(lián)網(wǎng)行業(yè)變化快有一定的關(guān)系。
問:存儲(chǔ)過程到底有什么用?
答:優(yōu)點(diǎn)是大數(shù)據(jù)量的情況下提高計(jì)算效率,缺點(diǎn)是存儲(chǔ)過程與系統(tǒng)代碼分離,有時(shí)可能隨手一動(dòng)存儲(chǔ)過程,造成與代碼的不一致,不好進(jìn)行版本控制。

參考資料

什么時(shí)候用存儲(chǔ)過程---存儲(chǔ)過程的好處
詳細(xì)全面解析sql存儲(chǔ)過程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/17700.html

相關(guān)文章

  • Java開發(fā)

    摘要:大多數(shù)待遇豐厚的開發(fā)職位都要求開發(fā)者精通多線程技術(shù)并且有豐富的程序開發(fā)調(diào)試優(yōu)化經(jīng)驗(yàn),所以線程相關(guān)的問題在面試中經(jīng)常會(huì)被提到。將對(duì)象編碼為字節(jié)流稱之為序列化,反之將字節(jié)流重建成對(duì)象稱之為反序列化。 JVM 內(nèi)存溢出實(shí)例 - 實(shí)戰(zhàn) JVM(二) 介紹 JVM 內(nèi)存溢出產(chǎn)生情況分析 Java - 注解詳解 詳細(xì)介紹 Java 注解的使用,有利于學(xué)習(xí)編譯時(shí)注解 Java 程序員快速上手 Kot...

    LuDongWei 評(píng)論0 收藏0
  • java并發(fā)編程學(xué)習(xí)21--基于springboot秒殺系統(tǒng)實(shí)現(xiàn)3--存儲(chǔ)過程

    摘要:但是經(jīng)過測(cè)試自身的是次秒,是一個(gè)相當(dāng)不錯(cuò)的數(shù)據(jù),所以我們這里將事務(wù)直接交給,使用存儲(chǔ)過程來降低行級(jí)鎖的持有時(shí)間。存儲(chǔ)過程代碼使用存儲(chǔ)過程之前必須保證數(shù)據(jù)庫已經(jīng)創(chuàng)建了存儲(chǔ)過程。表示使用在存儲(chǔ)過程中替代最后需要還原回來。 【什么是存儲(chǔ)過程 所謂的存儲(chǔ)過程是指:是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫中,用戶通過指定存儲(chǔ)過程的名字并給定參數(shù)(如果該存儲(chǔ)過程帶有參數(shù))來調(diào)用執(zhí)...

    keithyau 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Cobub

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<