• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦>生活課堂>生活小常識(shí)>

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

    時(shí)間: 稱紅1024 分享

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

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

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

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

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

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

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

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

      關(guān)于這個(gè),很容易糊涂。存儲(chǔ)過(guò)程,可以使用這樣的形式來(lái)返回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]

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

      不過(guò),對(duì)于自定義函數(shù),它必須指定定義為返回值為table類型的數(shù)據(jù)@t,并且在代碼中顯式的向該table @t中insert;或者,只是制定返回值為table類型,不指定return 的對(duì)象變量,直接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]

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

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

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

      5)存儲(chǔ)過(guò)程,用 EXECUTE 語(yǔ)句執(zhí)行。

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

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

      我ft,破csdn,整個(gè)格式都不會(huì),不知道干嘛的。不過(guò)還是言歸正傳。

      一般說(shuō)來(lái),自定義函數(shù)就有這三個(gè)用處:

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

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

      3,僅僅返回一個(gè)任意的變量,比如:

      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中的存儲(chǔ)過(guò)程,函數(shù),視圖有什么區(qū)別?

      存儲(chǔ)過(guò)程是預(yù)先寫(xiě)好并編譯好的SQL程序

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

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

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

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

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

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

     ?、僦貜?fù)使用。存儲(chǔ)過(guò)程可以重復(fù)使用,從而可以減少數(shù)據(jù)庫(kù)開(kāi)發(fā)人員的工作量。

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

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

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

      缺點(diǎn)

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

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

      3:重新編譯問(wèn)題,因?yàn)楹蠖舜a是運(yùn)行前編譯的,如果帶有引用關(guān)系的對(duì)象發(fā)生改變時(shí),受影響的存儲(chǔ)過(guò)程、包將需要重新編譯(不過(guò)也可以設(shè)置成運(yùn)行時(shí)刻自動(dòng)編譯)。

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

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

    1.自動(dòng)輸出SQLServer存儲(chǔ)過(guò)程依賴列表到EXCEL文件

    2.linux的mysqldump命令

    3630476 主站蜘蛛池模板: 99国产精品热久久久久久夜夜嗨 | 老子影院dy888午夜| 特黄特色大片免费| 日本vs黑人hd| 国产精品国产精品偷麻豆| 午夜dy888| 久久亚洲精品无码观看不卡 | 精品国产综合区久久久久久| 欧美18性精品| 在线电影中文字幕| 啊灬啊灬啊灬岳| 久久夜色精品国产亚洲| 2019天天干| 狂野黑人性猛交xxxxxx| 成年美女黄网站色| 国产又粗又长又硬免费视频| 亚洲日本视频在线观看| japanese日本护士xxxx18一19| 色噜噜狠狠狠综合曰曰曰| 最近中文字幕高清中文字幕电影二 | 国产免费一区二区三区免费视频| 亚洲欧美中文日韩v在线观看 | 健身私教干了我好几次| 中文无码乱人伦中文视频在线V| 黄色成人免费网站| 欧美日韩亚洲电影| 天天天操天天天干| 免费绿巨人草莓秋葵黄瓜丝瓜芭乐| 久久九九精品国产综合喷水| 四虎成年永久免费网站| 欧美日韩亚洲国产精品一区二区| 天天视频一区二区三区| 又大又粗又爽a级毛片免费看| 久久久久人妻一区二区三区vr| 久久伊人色综合| 欧美videosdesexo肥婆| 国产精品欧美一区二区三区不卡 | 中文字幕在线观看不卡| 西西人体44rtwww高清大但| 日韩欧美成末人一区二区三区| 国产福利一区二区三区在线观看|