日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle存储过程深入,深入了解oracle存储过程的优缺点

發(fā)布時間:2023/12/2 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle存储过程深入,深入了解oracle存储过程的优缺点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義:

存儲過程(Stored Procedure )是一組為了完成特定功能的SQL 語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計(jì)良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。 存儲過程是由流控制和SQL 語句書寫的過程,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,應(yīng)用程序使用時只要調(diào)用即可。在Oracle?中,若干個有聯(lián)系的過程可以組合在一起構(gòu)成程序包。

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

1.存儲過程可以使得程序執(zhí)行效率更高、安全性更好,因?yàn)檫^程建立之后 已經(jīng)編譯并且儲存到數(shù)據(jù)庫,直接寫sql就需要先分析再執(zhí)行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql注入 。存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。

2.建立過程不會很耗系統(tǒng)資源,因?yàn)檫^程只是在調(diào)用才執(zhí)行。

3.存儲過程可以用于降低網(wǎng)絡(luò)流量,存儲過程代碼直接存儲于數(shù)據(jù)庫中,所以不會產(chǎn)生大量T-sql語句的代碼流量。

4.使用存儲過程使您能夠增強(qiáng)對執(zhí)行計(jì)劃的重復(fù)使用,由此可以通過使用遠(yuǎn)程過程調(diào)用 (RPC) 處理服務(wù)器上的存儲過程而提高性能。RPC 封裝參數(shù)和調(diào)用服務(wù)器端過程的方式使引擎能夠輕松地找到匹配的執(zhí)行計(jì)劃,并只需插入更新的參數(shù)值。

5.可維護(hù)性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。

6.代碼精簡一致,一個存儲過程可以用于應(yīng)用程序代碼的不同位置。

7.增強(qiáng)安全性:

a、通過向用戶授予對存儲過程(而不是基于表)的訪問權(quán)限,它們可以提供對特定數(shù)據(jù)的訪問;

b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數(shù)據(jù)操作語言--DML,附加到輸入?yún)?shù));

c、SqlParameter 類指定存儲過程參數(shù)的數(shù)據(jù)類型,作為深層次防御性策略的一部分,可以驗(yàn)證用戶提供的值類型(但也不是萬無一失,還是應(yīng)該傳遞至數(shù)據(jù)庫前得到附加驗(yàn)證)。

可以封裝數(shù)據(jù)邏輯和業(yè)務(wù)規(guī)則,以便用戶可以僅通過開發(fā)人員和數(shù)據(jù)庫管理員打算使用的方式訪問數(shù)據(jù)和對象。

驗(yàn)證所有用戶輸入的參數(shù)化存儲過程可用于阻止 SQL 注入攻擊。 如果使用動態(tài) SQL,請確保將命令參數(shù)化,并絕對不能將參數(shù)值直接包括在查詢字符串中。

可禁止即席查詢和數(shù)據(jù)修改。 這樣將阻止用戶惡意或無意中損壞數(shù)據(jù)或執(zhí)行查詢,以避免降低服務(wù)器或網(wǎng)絡(luò)的性能。

可以在過程代碼中處理錯誤,而無需將錯誤直接傳遞給客戶端應(yīng)用程序。 這樣可防止返回錯誤消息,以避免其可能有助于探測攻擊。 在服務(wù)器上記錄錯誤并對其進(jìn)行處理。

存儲過程只能編寫一次,可由很多應(yīng)用程序訪問。

客戶端應(yīng)用程序不需要知道有關(guān)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)的任何信息。 只要更改不影響參數(shù)列表或返回的數(shù)據(jù)類型,就可以更改存儲過程代碼,而無需在客戶端應(yīng)用程序中進(jìn)行更改。

存儲過程可通過將多個操作組合到一個過程調(diào)用中來減少網(wǎng)絡(luò)通訊。

安全性好—可以訪問執(zhí)行存儲過程而不必?fù)碛兄苯硬僮骰A(chǔ)表的權(quán)限

減少網(wǎng)絡(luò)通信流—存儲過程可以包含多條SQL語句,但只要用一條語句來執(zhí)行該存儲過程,從而減少了客戶端應(yīng)用程序?qū)Ψ?wù)器的調(diào)用次數(shù)和長度

快速執(zhí)行—存儲過程在第一次執(zhí)行時進(jìn)行語法檢查和編譯,編譯好的版本存儲在高速緩存中,用于再次調(diào)用

保證一致性—如果用戶只通過存儲過程修改數(shù)據(jù),則可以消除偶然修改帶來的問題減少操作人員和編程人員的錯誤—由于傳遞信息少,因此執(zhí)行復(fù)雜任務(wù)更容易,不易出現(xiàn)SQL錯誤

借用SQL SERVER的存儲過程示意圖來表達(dá)一下,理解一下概念就好,具體到Oracle請另行查詢

存儲過程的運(yùn)行示意圖如下:

首先運(yùn)行CREATE PROC過程。這回解析查詢以確保會實(shí)際運(yùn)行這些代碼。它與直接運(yùn)行腳本的區(qū)別在于CREATE PROC命令可以利用所謂的延遲名稱解析。延遲名稱解析可以忽略一些對象還不存在的事實(shí)。

在創(chuàng)建了存儲過程后,它將等待第一次執(zhí)行。在那時,存儲過程被優(yōu)化,而查詢計(jì)劃被編譯并且緩存到系統(tǒng)上。后續(xù)幾次運(yùn)行該存儲過程時,除非通過使用WITH RECOMPILE選項(xiàng)指定,否則都會使用緩存的查詢計(jì)劃而不是創(chuàng)建一個新的查詢計(jì)劃。這意味著每次使用該存儲過程時,存儲過程都會跳過很多優(yōu)化和編譯工作。節(jié)省的確切時間取決于批處理的復(fù)雜性,批處理中表的大小,以及每個表上索引的數(shù)量。通常,節(jié)省的時間不是很多。但對于大多數(shù)場景來說可能是1秒或更少-但通過百分比可以計(jì)算出此區(qū)別(1秒比2秒快了100%)。當(dāng)需要進(jìn)行多次調(diào)用時或針對循環(huán)的情況,這一區(qū)別會變得更明顯。

存儲過程與函數(shù)的對比

總結(jié)

以上是生活随笔為你收集整理的oracle存储过程深入,深入了解oracle存储过程的优缺点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。