9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>生活課堂>生活小常識>

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

時間: 稱紅1024 分享

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

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

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

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

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

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

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

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

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

  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]

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

  不過,對于自定義函數(shù),它必須指定定義為返回值為table類型的數(shù)據@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值,或者返回查詢的結果集合,但是只是作為一系列功能的副產品;而后者,就是為了返回值而創(chuàng)建的。在【附錄】中詳細說明自定義函數(shù)的使用。

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

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

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

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

  【附錄】最后補充一下。

  我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ū)別?

  存儲過程是預先寫好并編譯好的SQL程序

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

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

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

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

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

  優(yōu)點

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

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

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

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

  缺點

  1:調試麻煩,但是用 PL/SQL Developer 調試很方便!彌補這個缺點。

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

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

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

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

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

2.linux的mysqldump命令

3630476 主站蜘蛛池模板: 国产亚洲精品久久久久久大师| 日本一区二区三区18岁| 日韩精品人妻中文字幕| 人妻丝袜中文无码av影音先锋| 欧美激情内射喷水高潮| 国产成人剧情AV麻豆果冻| 国产69精品久久久久乱码免费| 亚洲中文字幕亚洲中文精| 日韩中文字幕人妻一区| 成在线人午夜剧场免费无码| 亚洲第一国产综合| 亚洲av肉欲一区二区| 国产不卡一区不卡二区| 亚洲AV永久无码精品秋霞电影影院| 国产首页一区二区不卡| 99热久久这里只有精品| 久久亚洲精品国产精品尤物| 成人无码潮喷在线观看| 成人无号精品一区二区三区| 精品人妻少妇一区二区三区| 国产成人99亚洲综合精品| 亚洲二区中文字幕在线| 色狠狠色婷婷丁香五月| 免费人妻无码不卡中文18禁| 国产av无码国产av毛片| 超碰成人人人做人人爽| 综合图区亚洲欧美另类图片| 亚洲精品日本久久久中文字幕| 爆乳日韩尤物无码一区| 91精品国产一二三产区| 日韩免费码中文在线观看| 欧美成人精品三级网站| 人妻体内射精一区二区三区| 116美女极品a级毛片| 天天综合色一区二区三区| 囯产精品久久久久久久久久妞妞| 精品久久久久久无码人妻蜜桃| 国产精品自拍一二三四区| 爱情岛亚洲论坛成人网站| 精品久久精品午夜精品久久| 国产精品亚洲av三区色|