色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Oracle數(shù)據(jù)庫編寫PL/SQL代碼經(jīng)驗(yàn)談

瀏覽:122日期:2023-11-24 19:06:52
我從1990年就開始編寫PL/SQL代碼。這意味著我已經(jīng)編寫了幾萬行的軟件代碼,但我確信,其中的絕大多數(shù)代碼都非常拙劣,而且難以維護(hù)。 幸運(yùn)地是,我發(fā)現(xiàn)找到并遵循編寫出更好代碼的新方法還為時(shí)不晚。就是在去年,我的代碼質(zhì)量有了顯著改進(jìn);這些改進(jìn)主要是由于制定了一些簡(jiǎn)單的規(guī)則,并像紀(jì)律一樣加以遵守。 所有工作都獨(dú)自完成 我們很少有人是孤立工作的;大多數(shù)PL/SQL開發(fā)工作是在相對(duì)較大的機(jī)構(gòu)中進(jìn)行的。但我們基本上還是在自己的小隔間里用自己的設(shè)備獨(dú)自工作。幾乎沒有PL/SQL開發(fā)小組進(jìn)行正規(guī)的代碼復(fù)查或系統(tǒng)測(cè)試。 我不可能通過這篇文章改變你們開發(fā)小組的基本狀態(tài)。因此,我仔細(xì)地選取出以下幾點(diǎn)建議。實(shí)施其中任何一點(diǎn)并不需征得治理人員同意。不論你的小組是大是小,都不必讓其中的每個(gè)人都贊同這些編碼規(guī)則。你只需按以下建議來改變你的本人的編碼方式: 1. 嚴(yán)格遵循命名約定,似乎它們就是你的生命支柱。 2. 戒除編寫SQL的嗜好:編寫的SQL越少越好。 3. 使執(zhí)行部分短小:離別'意大利面條式的代碼'。 4. 找一位伙伴:非常贊同找個(gè)人來監(jiān)督你的工作。 1. 遵循命名約定 假如你建立并嚴(yán)格遵循一套命名約定,非凡是對(duì)于應(yīng)用程序組件的,你就可以節(jié)省很多時(shí)間。 當(dāng)然,遵循命名約定的想法并沒有什么新意,你可能已經(jīng)聽煩了。所以我并不提出什么宏偉的命名計(jì)劃,而是給出一些非常具體而明確的約定,然后證實(shí)這些約定會(huì)多么有用。 前幾個(gè)月我一直在為PL/SQL開發(fā)人員設(shè)計(jì)、構(gòu)建一種新工具。它名為Swyg(可以在www.swyg.com中找到),可以幫助程序員完成代碼的生成、測(cè)試及重用的工作。它具有幾個(gè)獨(dú)特的組件。我為每個(gè)組件指定了一個(gè)由兩個(gè)字母組成的縮寫名稱,如下所示: SF-Swyg的基礎(chǔ)部件SM-Swyg的元數(shù)據(jù)SG-Swyg的生成程序SL-Swyg的代碼庫ST-Swyg的單元測(cè)試 于是,我便遵循表1中的命名約定,同時(shí)使用這些縮寫。遵循這些約定有什么好處呢?一般來講,假如我要求一致的命名規(guī)則,我就可以更流暢更高效地編寫代碼。 明確地說,這些約定具有可猜測(cè)性,意思是說我編寫的SQL程序能生成有用的腳本。例如,通過使用表1中的約定,可以生成Swyg中所有基礎(chǔ)包的安裝腳本。執(zhí)行這些工作的SQL*Plus腳本如清單1所示。這類腳本非常有用,因?yàn)樗馕吨也槐厥謩?dòng)維護(hù)安裝腳本。當(dāng)我向Swyg方案中增加另一個(gè)表,并生成一組相關(guān)包時(shí),我只要運(yùn)行我的腳本,更新后的安裝腳本便會(huì)跳出來。 2. 戒除編寫SQL的嗜好 編寫的SQL越少越好,這似乎與我們的直覺不太一致。對(duì)于PL/SQL開發(fā)人員來說,這是一個(gè)奇異的建議,因?yàn)镻L/SQL的主要優(yōu)點(diǎn)之一就是可以毫不費(fèi)力地在代碼中編寫SQL語句。不過,這種簡(jiǎn)易性也是這種語言的一個(gè)致命的弱點(diǎn)。 可以將純粹的SQL語句直接置于PL/SQL代碼中,而無需JDBC或ODBC之類的中間層。因此,無論何時(shí)何地,PL/SQL開發(fā)人員只要需要SQL語句,他們通常就會(huì)向其應(yīng)用程序代碼中嵌入SQL語句。那么這樣做有什么問題嗎? 在PL/SQL代碼中到處使用SQL語句必然會(huì)導(dǎo)致以下后果: 盡管實(shí)際表現(xiàn)不同,但同一邏輯語句仍會(huì)出現(xiàn)重復(fù),從而導(dǎo)致過多的語法分析,且難于優(yōu)化應(yīng)用程序的性能。暴露商務(wù)規(guī)則和方案。這直接在SQL語句中包含了執(zhí)行商務(wù)規(guī)則的邏輯。這些規(guī)則總在變化,所以應(yīng)用程序的維護(hù)成本會(huì)急劇增加。 當(dāng)然,你要編寫的每一個(gè)PL/SQL應(yīng)用程序幾乎都是基于基礎(chǔ)表和視圖的。你需要執(zhí)行SQL語句。問題不在于是否執(zhí)行,而是何時(shí)執(zhí)行、如何執(zhí)行。 假如你對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行封裝,或者將它們隱藏于一個(gè)PL/SQL代碼層(通常是一個(gè)代碼包)之后,那么你的應(yīng)用程序?qū)?huì)更健壯,而且你還會(huì)發(fā)現(xiàn)創(chuàng)建和維護(hù)變得更易多了。 我們來看一個(gè)簡(jiǎn)單的例子。 假定我需要編寫一個(gè)處理某員工工作的程序。第一件事是獲取該員工的全名,定義為'姓名逗號(hào)(,)姓';然后我可以進(jìn)行具體分析。清單2給出了這種情況下我很可能要編寫的這類代碼的一個(gè)示例。 一切似乎都是這么簡(jiǎn)單和直接;這些代碼可能會(huì)有什么錯(cuò)誤呢?實(shí)際上真是非常糟糕。最主要的是我暴露了一個(gè)商務(wù)規(guī)則:全名的結(jié)構(gòu)。我可能要花費(fèi)數(shù)小時(shí)來對(duì)此代碼及其所基于的應(yīng)用程序進(jìn)行測(cè)試。但就在它剛剛投入使用時(shí),我才知道客戶會(huì)不斷地打電話告訴我,實(shí)際上,他們的全名應(yīng)該表示為'名空格姓'。 現(xiàn)在怎么辦?搜索所有位于引號(hào)內(nèi)的單個(gè)逗號(hào)? 現(xiàn)實(shí)的解決方案是使用隱藏所有細(xì)節(jié)、只提供一組預(yù)定義、猜測(cè)試及預(yù)優(yōu)化并能完成所有任務(wù)的程序包。清單3為基于封裝代碼重新編寫的process_employee過程。hr_employee_tp包提供了用于定義保存姓名的局部變量的類型;hr_employee_rp包含有基于一種商務(wù)規(guī)則而返回全名的函數(shù)。 將顯示PL/SQL語句灌入SQL代碼很輕易,同樣,談?wù)摲庋b這些語句是如何重要也不費(fèi)勁。但另一方面,編寫執(zhí)行封裝任務(wù)的代碼卻具有挑戰(zhàn)性;甚至是不現(xiàn)實(shí)的。生成這些包或許更有意義。 幾年前,我曾幫助構(gòu)建這樣一個(gè)生成程序。該程序段為PL/Generator,現(xiàn)在由Quest Software公司擁有,PL/SQL開發(fā)社區(qū)可以免費(fèi)使用。你可以從我的網(wǎng)站www.StevenFeuerstein.com/puter/gencentral.htm下載。要知道,其封裝體系結(jié)構(gòu)與我在前面所概括的約定不同。PL/Generator創(chuàng)建了一個(gè)單獨(dú)的包,它包含了一個(gè)表的類型、查詢和變化邏輯的全部?jī)?nèi)容。 當(dāng)你不再編寫太多的SQL,而是調(diào)用執(zhí)行SQL的程序時(shí),無論你是生成還是編寫自己的定制封裝,你的應(yīng)用程序都會(huì)受益匪淺。
標(biāo)簽: Oracle 數(shù)據(jù)庫
主站蜘蛛池模板: 成年男女男精品免费视频网站 | 日本在线视频免费看 | 成年网在线观看免费观看网址 | 黄色大片三级 | 成人免费在线视频 | 久久久久久久久毛片精品 | 国产一级片儿 | 欧美视频在线观看免费精品欧美视频 | 亚洲欧美日韩在线观看二区 | mm在线精品视频 | 国产精品理论 | 91成人国产网站在线观看 | 性感美女一级毛片 | 深夜福利视频在线观看免费视频 | 欧美成人午夜毛片免费影院 | 99精品视频在线观看 | 国产高清视频免费观看 | 久久久精品成人免费看 | 亚洲免费网站在线观看 | 亚洲精品久久一区毛片 | 亚洲国产天堂久久精品网 | 国产猛烈无遮掩视频免费网站男女 | 久久高清精品 | 亚洲欧洲一二三区机械有限公司 | 国产超薄肉色丝袜足j | 精品国产成人三级在线观看 | 久久精品全国免费观看国产 | 色天天躁夜夜躁天干天干 | 国产盗摄视频 | 久青草国产97香蕉在线视频xx | 日本特黄特色大片免费视频网站 | 欧美精品人爱a欧美精品 | 日韩欧美一区二区三区久久 | 免费萌白酱国产一区二区三区 | 国产一区免费在线观看 | 最新国产精品亚洲 | 日韩一级片免费在线观看 | 欧美一区二区二区 | 亚洲 欧美 手机 在线观看 | 欧美日韩精品在线视频 | 久草在线中文视频 |