<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學(xué)習(xí)啦>生活課堂>生活小常識>

        存儲過程和自定義函數(shù)的區(qū)別

        時間: 稱紅1024 分享

          存儲過程和自定義函數(shù)的區(qū)別在哪里呢?下面是學(xué)習(xí)啦小編給大家整理的存儲過程和自定義函數(shù)的區(qū)別,供大家參閱!

          存儲過程和自定義函數(shù)的區(qū)別

          1)存儲過程,功能強(qiáng)大,可以執(zhí)行包括修改表等一系列數(shù)據(jù)庫操作,也可以創(chuàng)建為 SQL Server 啟動時自動運(yùn)行的存儲過程。

          自定義函數(shù),用戶定義函數(shù)不能用于執(zhí)行一組修改全局?jǐn)?shù)據(jù)庫狀態(tài)的操作。

          2)存儲過程,可以使用非確定函數(shù)。

          自定義函數(shù),不允許在用戶定義函數(shù)主體中內(nèi)置非確定函數(shù)。

          3)存儲過程,主要是返回一個int狀態(tài)結(jié)果,也可返回記錄集。

          自定義函數(shù),可以返回表變量。

          關(guān)于這個,很容易糊涂。存儲過程,可以使用這樣的形式來返回N多的結(jié)果:

          create procedure sp1

          as

          begin

          select name, fid_fk from table_1

          print '111'

          select testname ,fid from table_2

          end

          create procedure sp1 as begin select name, fid_fk from table_1 print '111' select testname ,fid from table_2 end

          [表1]

          而這個結(jié)果,只能以兩種形式被使用:insert into table_3(name, fid_fk) exec sp1; 或者 EXEC sp1.

          不過,對于自定義函數(shù),它必須指定定義為返回值為table類型的數(shù)據(jù)@t,并且在代碼中顯式的向該table @t中insert;或者,只是制定返回值為table類型,不指定return 的對象變量,直接return 該表。即:

          create function fn1()

          returns table

          as

          return select fid, testname from table_2

          create function fn1() returns table as return select fid, testname from table_2

          [表2]

          或者

          create function fn1()

          returns @v table

          (fid int primary key not null,

          testname nchar(10))

          as

          begin

          insert into @v select fid,testname from table_2

          end

          create function fn1() returns @v table (fid int primary key not null, testname nchar(10)) as begin insert into @v select fid,testname from table_2 end

          [表3]

          在這個方面,最能夠看出存儲過程和自定義函數(shù)的區(qū)別:前者是一系列功能的集合,可以返回int值,或者返回查詢的結(jié)果集合,但是只是作為一系列功能的副產(chǎn)品;而后者,就是為了返回值而創(chuàng)建的。在【附錄】中詳細(xì)說明自定義函數(shù)的使用。

          4)存儲過程,其返回值不能被直接引用;而是必須被使用為exec sp1或者 insert into table 的形式使用。

          自定義函數(shù),其返回值可以被直接引用。

          5)存儲過程,用 EXECUTE 語句執(zhí)行。

          自定義函數(shù),在查詢語句中調(diào)用。

          【附錄】最后補(bǔ)充一下。

          我ft,破csdn,整個格式都不會,不知道干嘛的。不過還是言歸正傳。

          一般說來,自定義函數(shù)就有這三個用處:

          1,如上[表2],返回一個in-line table value;

          2,如上[表3],返回一個multi statement table value;

          3,僅僅返回一個任意的變量,比如:

          Create Function CubicVolume

          (@CubeLength decimal(4,1),@CubeWidth decimal(4,1),@CubeHeight decimal(4,1) )

          Returns decimal(12,3)

          As

          Begin

          Return (@CubeLength * @CubeWidth * @CubeHeight)

          End

          2.

          SQL中的存儲過程,函數(shù),視圖有什么區(qū)別?

          存儲過程是預(yù)先寫好并編譯好的SQL程序

          函數(shù)預(yù)先寫好的代碼片斷,有系統(tǒng)函數(shù),也有自定義函數(shù)

          視圖是預(yù)先建立的查詢語句,用起來就像使用表一樣了

          存儲過程需要單獨(dú)執(zhí)行,函數(shù)可以隨處調(diào)用,視圖是一種直觀的表現(xiàn)方式~

          存儲過程優(yōu)點(diǎn)和缺點(diǎn)

          存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲在數(shù)據(jù)庫中,經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。

          優(yōu)點(diǎn)

          ①重復(fù)使用。存儲過程可以重復(fù)使用,從而可以減少數(shù)據(jù)庫開發(fā)人員的工作量。

          ②提高性能。存儲過程在創(chuàng)建的時候在進(jìn)行了編譯,將來使用的時候不再重新翻譯。一般的SQL語句每執(zhí)行一次就需要編譯一次,所以使用存儲過程提高了效率。

          ③減少網(wǎng)絡(luò)流量。存儲過程位于服務(wù)器上,調(diào)用的時候只需要傳遞存儲過程的名稱以及參數(shù)就可以了,因此降低了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。

          ④安全性。參數(shù)化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權(quán)限應(yīng)用于存儲過程。

          缺點(diǎn)

          1:調(diào)試麻煩,但是用 PL/SQL Developer 調(diào)試很方便!彌補(bǔ)這個缺點(diǎn)。

          2:移植問題,數(shù)據(jù)庫端代碼當(dāng)然是與數(shù)據(jù)庫相關(guān)的。但是如果是做工程型項目,基本不存在移植問題。

          3:重新編譯問題,因為后端代碼是運(yùn)行前編譯的,如果帶有引用關(guān)系的對象發(fā)生改變時,受影響的存儲過程、包將需要重新編譯(不過也可以設(shè)置成運(yùn)行時刻自動編譯)。

          4: 如果在一個程序系統(tǒng)中大量的使用存儲過程,到程序交付使用的時候隨著用戶需求的增加會導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的變化,接著就是系統(tǒng)的相關(guān)問題了,最后如果用戶想維護(hù)該系統(tǒng)可以說是很難很難、而且代價是空前的,維護(hù)起來更麻煩。

        存儲過程和自定義函數(shù)的區(qū)別相關(guān)文章:

        1.自動輸出SQLServer存儲過程依賴列表到EXCEL文件

        2.linux的mysqldump命令

        3630476 主站蜘蛛池模板: 亚洲欧美日韩在线不卡| 午夜短无码| 国产大尺度一区二区视频| 国产精品av免费观看| 美女内射中出草草视频| 欧美高清狂热视频60一70| 日韩一区在线中文字幕| 亚洲一区二区三区色视频| 久久精品人妻无码一区二区三区| 免费视频欧美无人区码| 伊人天天久大香线蕉av色| 日本特黄特黄aaaaa大片| 99精品国产中文字幕| 国产情侣激情在线对白| 国产精品尤物午夜福利| 欧美 日韩 国产 成人 在线观看| 婷婷综合缴情亚洲狠狠| 亚洲日韩中文字幕无码一区| 久久精品国产免费观看频道| 国产午夜精品在人线播放| 亚洲国产成人综合熟女| 无码色AV一二区在线播放| 国产网友愉拍精品视频手机| 久久99er热精品免费播| 日本阿v片在线播放免费| 国产老妇伦国产熟女老妇高清| 亚洲成亚洲成网中文字幕| 成人午夜精品无码一区二区三区| 四虎成人高清永久免费看| 午夜视频免费试看| 亚洲色成人网站www永久四虎| 国产亚洲视频免费播放| 久久精品国产一区二区三| 好爽好紧好大的免费视频| 久久99久久精品视频| 欧美亚洲国产日韩一区二区| 国产精品无码久久AV嫩草| 日韩av综合免费在线| 久久天天躁夜夜躁狠狠躁2022| 日本阿v片在线播放免费| 三级网站|