當前位置:首頁 » 服務存儲 » 存儲過程在實際項目中用嗎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程在實際項目中用嗎

發布時間: 2022-05-26 01:50:24

存儲過程作用是什麼,優缺點以及適用范圍是什麼

中用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是sql 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。存儲過程存儲在資料庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行以及其它強大的編程功能。存儲過程在創建時即在伺服器上進行編譯,所以執行起來比單個SQL語句快。 存儲過程的優點: 1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。 2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。 3.存儲過程可以重復使用,可減少資料庫開發人員的工作量 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權 缺點:1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。 優點: 1.由於應用程序隨著時間推移會不斷更改,增刪功能,T-SQL過程代碼會變得更復雜,StoredProcere為封裝此代碼提供了一個替換位置。 2.執行計劃(存儲過程在首次運行時將被編譯,這將產生一個執行計劃-- 實際上是 Microsoft SQL Server為在存儲過程中獲取由 T-SQL 指定的結果而必須採取的步驟的記錄。)緩存改善性能。 ........但sql server新版本,執行計劃已針對所有 T-SQL 批處理進行了緩存,而不管它們是否在存儲過程中,所以沒比較優勢了。 3.存儲過程可以用於降低網路流量,存儲過程代碼直接存儲於資料庫中,所以不會產生大量T-sql語句的代碼流量。 4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用 (RPC) 處理伺服器上的存儲過程而提高性能。RPC 封裝參數和調用伺服器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,並只需插入更新的參數值。 5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。 6.代碼精簡一致,一個存儲過程可以用於應用程序代碼的不同位置。 7.更好的版本控制,通過使用 Microsoft Visual SourceSafe 或某個其他源代碼控制工具,您可以輕松地恢復到或引用舊版本的存儲過程。 8.增強安全性: a、通過向用戶授予對存儲過程(而不是基於表)的訪問許可權,它們可以提供對特定數據的訪問; b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數); c、SqlParameter 類指定存儲過程參數的數據類型,作為深層次防禦性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至資料庫前得到附加驗證)。 缺點: 1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。 2.可移植性差 由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。

② oracle 存儲過程在現實中的應用都有哪些

1. 不願過多的暴露資料庫的結構,通過存儲過程的調用,將結果直接結果返回給java程序(多為第三方的),而不用把數據結構告訴第三方

2. 承擔部分業務邏輯處理:oracle資料庫運行計算速度也是很快了,通過存儲過程可以承擔部分業務邏輯,減輕web伺服器的壓力

3. oracle 自身的job應用,需要調用存儲過程

4. 其他應該軟體需要調用存儲過程。如:IVR,datastation

不知道這樣說有問題不,參考下吧,也請後面的人補充

③ 存儲過程是多用還是少用

做項目的時候我們有時候會面臨一個選擇,我們到底是應該多寫存儲過程還是少寫存儲過程了?這個問題的爭論也是由來已久,在不同的公司以及不同的技術負責人那裡往往會得到不同的答案。在實際項目中我們最後所採取的方式,往往不外乎以下三種方式。
第一種方式是要求所有資料庫操作不使用任何的存儲過程,所有操作都採用標准sql語句來完成,即便是一個動作需要完成多步資料庫操作,也不使用任何存儲過程,而是在程序代碼中採用事務的方式來完成;第二種方式就是就要求所有的資料庫操作都用存儲過程封裝起來,哪怕是一個最簡單的insert 操作。在程序代碼看不到一行 sql語句,如果採用分工合作的方式,程序員甚至都可以不懂sql語法。第三種方式是一般相對簡單的資料庫操作採用標准sql語句來完成,一些相對比較復雜的商務邏輯用存儲過程來完成。
當然系統如果採用了hibernate或nhibernate之類的框架,不需要寫sql語句的時候,我想還是應該屬於第三種方式,因為在開發的時候hibernate框架允許我們在適當的時候,拋開其框架自己寫存儲過程和sql語句來完成資料庫操作。其實這三種方式都各有所長,也各有不足。
第一種方式是所有的資料庫操作都採用標准sql語句來完成的方式,在程序的執行效率上是肯定不如後面兩種方式,系統如果是一個大型的ERP,這種方式就是絕對不可取的。因為在開發基本結束後,系統如果需要優化或者希望得到優化時,那對開發人員來說就是一件非常麻煩的事情了,因為優化的重點基本上都是集中資料庫操作上,開發人員所能做的就是一個個sql語句去檢查,是不是還能進一步優化,尤其是一些相對比較復雜的查詢語句是我們所檢查的重點。分頁顯示就是一個典型的存儲過程提高程序效率的例子。如果使用存儲過程來進行分頁操作,就是利用存儲過程從系統中提取我們所需要的記錄集,分頁的效率就大大提高了。反過來如果我們不用存儲過程進行分頁操作,是利用sql語句的方式把所有記錄集都讀入內存中,然後再從內存中獲取我們所需要的記錄集合,這樣分頁效率自然就降低了。當然利用sql語句也能得到我們所需要的記錄,而不是所有記錄,但是那樣麻煩多了,不在我們討論范圍之內。
這種方式另外還有一個不足之處,一個系統或一個項目總會或多或少地存在有一些容易變化而又復雜的商務邏輯,如果把這些復雜的商務邏輯封裝到存儲過程中,商務邏輯的變化都只涉及存儲過程變化,而與程序代碼不發生關系,那麼不用存儲過程太可惜了。
這種方式雖然有不足,但是一旦採用這種方式的話,我們如果對該項目進行資料庫移植的時候,開發人員就會覺得當時的決策人是多麼的偉大與英明。而且我們知道access和mysql的以前版本是不提供存儲過程支持的,所有一些中小項目在這個方面的選擇往往也是不得已而為之。不用存儲過程有一個優點,調試代碼的時候沒有存儲過程可是要方便很多很多的哦,所以在很多很多的項目中都是採用標準的sql語句而不使用任何的存儲過程。這可是大多程序員用標准sql而不用存儲過程的直接原因,說白了,就是嫌麻煩。
第二種方式是所有的資料庫操作全部採用存儲過程封裝的方式,如果採用這種方式,程序的執行效率相對要高,尤其面對在一些復雜的商務邏輯時候,不僅在效率方面有明顯的提高,而且當商務邏輯發生變化時,我們開發人員做相應的修改的時候,往往都不用修改程序代碼,僅僅修改存儲過程就能滿足系統變化了。
還有一個好處就是當我們開發好的一個系統後,如果發現一種模式或語言在某些方面難以滿足需求時,我們就可以很快的用兩外一種語言來重新開發,那個時候就非常方便了。比如在02年中科院下屬的一個公司就用ASP開發了一個B/S結構的HIS,幾乎所有的功能都是用存儲過程實現的。杭州婦幼保健醫院在使用過程中由於種種原因要求改成C/S結構的,改的時候就發現當初大量的使用存儲過程真是好啊!
全部用存儲過程的方式有一個缺點就是程序在開發時調式相當麻煩,因為大家都知道程序錯誤大部分是出在代碼與資料庫交互的時候。回想起來也真是感慨,依稀記得當年在煙台的時候,當時是網通的一個項目,月底時他們從用戶那所收的費用在帳上的金額與實際所收金額對不上,結果熬了一個通宵才搞定,最後找出原因來就是在存儲過程中犯了個不起眼的錯誤。
第三種方式就是部分使用存儲過程。就是在處理一些復雜的商務邏輯的時候用存儲過程封裝,一般比較簡單的資料庫操作還是用標准sql語句的方式。這樣能保證程序的執行效率,同時也能保證一定的開發效率。這種方式也是在實際項目應用最多的方式。
具體一個項目採用哪種方式來做,是需要我們根據具體情況來確定的,不能一概而論。如果項目小、對程序的執行效率要求也不高。而且將來項目還可能做資料庫移植的話,那就採用第一重方式是最好的;如果項目運行一定時間可能採用別的語言來重新開發,那就用第二種方式比較好。
如果是一個很多因素都不太確定的項目,個人認為一般採用第三方式比較好,就是一般的資料庫操作都採用sql語句來實現,當然sql語句最好是標準的 sql語句,而那些相對比較煩瑣的商務邏輯就用存儲過程來封裝好了。其實就是只在項目的某些特定的功能模塊中採用存儲過程的方式而已。這樣做出來的項目既能靈活升級與移植,又能保證程序的執行效率。
扯遠一點,如果是一個比較大型的ERP之類的項目,個人建議hibernate是個不錯的選擇,.net是nhibernate。資料庫操作就省心了。沒有用過的朋友可能剛開始有點排斥,這很正常,但是用熟練就能感覺它好用。

④ 為什麼要用存儲過程,什麼時候用存儲過程

儲過程說白了就是一堆 SQL 的合並。中間加了點邏輯控制。
但是存儲過程處理比較復雜的業務時比較實用。
比如說,一個復雜的數據操作。如果你在前台處理的話。可能會涉及到多次資料庫連接。但如果你用存儲過程的話。就只有一次。從響應時間上來說有優勢。
也就是說存儲過程可以給我們帶來運行效率提高的好處。
另外,程序容易出現 BUG 不穩定,而存儲過程,只要資料庫不出現問題,基本上是不會出現什麼問題的。也就是說從安全上講,使用了存儲過程的系統更加穩定。
數據量小的,或者和錢沒關系的項目不用存儲過程也可以正常運作。mysql 的存儲過程還有待實際測試。如果是正式項目,建議你用 sql server 或 oracle 的存儲過程。數據與數據之間打交道的話,過程會比程序來的快的多。面試官問有沒有用存儲,實際上就是想知道前來面試的程序員到底做過數據量大的項目沒。如果是培訓出來的,或者小項目小公司出來的,對存儲肯定接觸的少了。
所以,要想進大公司,沒有豐富存儲過程經驗,是不行的。
那麼什麼時候才可以用存儲?對於數據量不是很大以及業務處理不是很復雜的小項目就無需要了么?
錯。
存儲過程不僅僅適用於大型項目,對於中小型項目,使用存儲過程也是非常有必要的。其威力和優勢主要體現在:
1.
存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.
當對資料庫進行復雜操作時(如對多個表進行 Update,Insert,Query,Delete 時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。這些操作,如果用程序來完成,就變成了一條條的 SQL 語句,可能要多次連接資料庫。而換成存儲,只需要連接一次資料庫就可以了。
3.
存儲過程可以重復使用,可減少資料庫開發人員的工作量。
4.
安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。
一般來說,存儲過程的編寫比基本SQL語句復雜,編寫存儲過程需要更高的技能,更豐富的經驗。經自已測試,一個有著十萬條記錄的表,通過php調用存儲過程比通過PHP執行sql語句獲取所有記錄的時間,平均快0.4秒左右.

⑤ 為什麼要使用存儲過程

存儲過程是指一組具有某種特殊功能的SQL語句集,常用於大型資料庫中,也出現於開發過程中。程序員經常運用存儲過程是由於其具有以下優點:

一、響應時間上來說有優勢:如果你在前台處理的話。可能會涉及到多次資料庫連接。但如果你用存儲過程的話,就只有一次。存儲過程可以給我們帶來運行效率提高的好處。

二、安全上使用了存儲過程的系統更加穩定:程序容易出現 BUG 不穩定,而存儲過程,只要資料庫不出現問題,基本上是不會出現什麼問題的。

(5)存儲過程在實際項目中用嗎擴展閱讀

存儲過程不僅僅適用於大型項目,對於中小型項目,使用存儲過程也是非常有必要的。

一般來說,存儲過程的編寫比基本SQL語句復雜,編寫存儲過程需要更高的技能,更豐富的經驗。經自已測試,一個有著十萬條記錄的表,通過php調用存儲過程比通過PHP執行sql語句獲取所有記錄的時間,平均快0.4秒左右。

⑥ 請問PL/SQL裡面的存儲過程在實際的開發中用的多不多

在工廠裡面用Oracle資料庫,SFIS/SFC/MES很多都會用到存儲過程.
我上班的前幾個公司的MES系統資料庫是ORACLE 開發資料庫方面,用存儲過程還是很多的。
用於復雜邏輯,判斷性的,還是很方便的。簡單的當然就不需要了

⑦ 存儲過程在實際項目中用的多嗎

存儲過程在項目中非常重要,我們的數據等格式都是通過這個存儲過程得到翻譯,最終形成輸出端文件,相當於中樞

⑧ 一般項目都用存儲過程么

這個不一定,沒有固定的范圍。
有些特殊需求的項目,可能根本就不允許用存儲過程。
有些可能用上千行存儲過程,
這個不是由我們來決定的,要看項目的具體需求。

⑨ 現在oracle在實際運用中存儲過程用的多嗎

這個是必須使用的,我們公司的項目中就使用到了
*1) 存儲過程幫助在資料庫層聚集T-SQL代碼。嵌入即席SQL的網站或應用程序在應用環境下很難修改,當即席SQL嵌入在應用程序內的時候,你可能會花費太多時間試圖找到和調試嵌入的SQL。-- 一旦找到了bug,你可能就需要重新編譯可執行程序,引起不必要的應用程序臨時停止或痛苦的應用程序部署。如果把T-SQL集中到存儲過程中去,-- 你就只需要集中在一個地方來查詢SQL代碼或SQL批處理。如果你能正確地為代碼建立文檔並對代碼標准化,存儲過程就會提升整個應用程序的可支持性。

-- *2) 存儲過程幫助大的即席查詢減少網路流量。編寫應用程序調用而不是500行的SQL調用來執行存儲過程,對網路以及應用程序的性能有正面影響,特別是當調用在一分鍾內重復數千次時。

-- *3) 存儲過程促進代碼的可利用性。例如,如果你的網站應用程序使用一個下拉菜單來包含一組城市,並且這個下拉菜單用於很多網頁,-- 你可以在每個頁面調用存儲過程而不是在多個地方嵌入相同的SQL。

-- *4) 存儲過程淡化數據獲取的方法。如果你修改了提供源數據的基本表,存儲過程(和視圖相似)能讓應用程序對這個修改透明。這樣就不需要修改應用程序底層的代碼就能修改。-- 你可以把老的表換成新的,而且只要同樣的列和數據類型返回給應用程序,則應用程序完全不知情。

-- *5) 與視圖不同,存儲過程可以利用流控制技術、臨時表、表變數等。

-- *6) 存儲過程對查詢響應時間的影響比較穩定。如果你使用大量的即席查詢,可能會注意到有時候從查詢中返回結果所花的時間變化很大

⑩ mysql 索引 存儲過程 在實際使用中 常用不常用

在大項目用的多,可以提高性能。小項目不怎麼用