亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

多方面講解pl/sql編程存在的幾個缺點

2024-07-21 02:42:39
字體:
來源:轉載
供稿:網友
pl/sql編程共分為四種不同的缺點,包括以下幾個方面:

·數據中斷的威脅—可能會導致數據丟失;

·使系統難以使用—如可能會減少重用性或者使系統難以維護;

·降低性能—通常是浪費存儲和CPU;

·安全威脅;

詳細內容如下:

1.直接在條件中使用non-deterministic函數:降低性能

non-deterministic函數不依賴于where子句使用的當前行值,可能依賴于上下文從不同的表推進數據,或在數據上執行操作,這些函數并不包含在select列表中。

函數會執行過多的次數,可能對于每個查詢只需要執行一次即可,但是Oracle可能為結果集的每一行都執行了一次,甚至數據源的每一行執行了一次;

·如果不依賴于任何行值,將其放在select function() from dual中;

·如果函數依賴于引用的數據,則將其移到子查詢中,然后連接子查詢和主查詢;

·如果對于相同的值返回相同的結果,則將函數標記為deterministic;

·使用Oracle 11g的結果集緩存功能;

2.捕獲異常處理塊使用WHEN OTHERS THEN:數據中斷的威脅;

通常用來忽略所有不影響事務的錯誤(如唯一索引不能包含重復數據,插入錯誤應該被log);

when others將會防止其他不可預計錯誤傳播,如一個觸發器導致的突發表錯誤可能被隱藏,而造成事務實際上沒有完成它應該做的而在數據庫中事實上已經完成了。

·對于檢查特定的錯誤不要使用when others,如no_data_found。

·不要假設你已經考慮到了任何問題,存儲問題,突發表問題應該反饋給客戶端,而不是僅僅的拋棄;

3.客戶端以對象屬主訪問:安全威脅;

4.客戶端訪問表:安全威脅;

為不同的應用程序建立視圖,避免直接訪問表。

5.將復雜的PL/SQL嵌入PL/SQL:使系統難以使用;

--大塊的SQL代碼,通常是一個復雜的SELECT語句,使用內置函數/過程;

--在內置PL/SQL過程/函數中使用優化器提示;

將復雜的SQL代碼從PL/SQL中提取出來,放到一個視圖中,然后在過程中從視圖上選擇,將優化器提示從過程上移到視圖上。

6.使用數字處理錯誤:使系統難以使用

在PL/SQL中使用RAISE_application_ERROR,而沒有為錯誤碼聲明PL/SQL異常;

·在pl/sql包頭中,聲明異常碼和異常,使用這些異常而不是應用程序錯誤號;

·發送異常時順便帶上一條消息,使用RAISE_APPLICATION_ERROR和恰當的異常碼;

·為單獨的過程創建一個包,該包專門用來聲明異常;

7.使用輸出參數處理錯誤:數據中斷的威脅;

過程和函數生命返回碼作為輸出參數,通知調用者問題;

建議使用聲明的異常處理錯誤,異常必須由調用者處理,而不會被不可預料的忽略,并且可以同時聲明錯誤碼和消息,不需要OUTPUT參數;

8.在視圖中格式化數據:使系統難以使用;

--在視圖的DATE和NUMBER列上使用to_char函數;

--在視圖中結合字符串;

在終端進行數據格式化,而不是數據庫中,視圖不應該進行任何的格式化;

9.硬編碼本地Varchar2變量尺寸:使系統難以使用;

-- PL/SQL函數/過程中聲明本地Varchar2類型存儲表的值,硬編碼長度;

--視圖以硬編碼格式聲明Varchar2長度;

使用%type引用基層表對象。

10.忽略異常:數據中斷的威脅;

-- "Exception When others then NULL;"

可能會導致如空間錯誤之類的嚴重錯誤被忽略。

·如果不希望任何錯誤影響事務,則使用自治事務,并將錯誤log到錯誤表中;

·如果要處理某些具體的錯誤,則使用特定的exception;

11.不使用綁定變量更改參數:降低可用性;

經常使用相同的語句執行,不使用綁定變量,而使用文本值;

會導致每次都編譯查詢;

12.在觸發器中依賴于條件列值,數據中斷的威脅;

if updating('ColumnName') then;

在大多數GUI情況下,該方法不能正確的工作,因為GUI層保留所有字段,而不是單獨的字段,如下:

create table tbl(col1 number, col2 varchar2(10));

CREATE OR REPLACE TRIGGER trig1

BEFORE UPDATE ON tbl

FOR EACH ROW

BEGIN

if not updating('col1') then

raise_application_error (-20001,'Col1 was not updated');

end if;

END;

/

insert into tbl values (1,'test');

update tbl set col1=1;

比較:new.column和:old.column,如果列為NULL,確保使用了DECODE。

13.依賴于在包變量中的上下文信息:數據中斷的威脅;

依賴對象結構更改會導致全部變量的清空。

·使用sys_context存儲簡單的交叉調用上下文;

·使用臨時表存儲復雜的內部事務上下文;

·使用表存儲復雜的內部調用上下文;

14.依賴于外部上下文初始化:數據中斷的威脅;

視圖和過程依賴于sys_context()得到上下文信息,上下文通常要求調用者調用存儲過程設置。

數據庫和應用程序之間的網絡會斷,大多數現代網絡都會自動重新連接,但是初始化過程不會調用并且舊的上下文將會丟失。

·使用登陸觸發器設置上下文;

15.分布式觸發器的二次處理:數據中斷的威脅;

傳播數據更新遠程系統;

在第二個子系統中使用LOG表,在觸發器中使用When others LOG任何異常,使用dbms_utility.format_error_stack或sqlerrm捕獲詳細信息;

16.存儲rowid在之后引用,數據中斷的威脅;

ROWID值存儲在表或客戶端,以在之后引用;

ROWID會更改,使用主鍵引用;

17.存儲空的LOBs,降低性能;

在CLOB字段存儲Empty CLOB而不是NULL;

Oracle為EMPTY CLOBs分配空間;

18.太多層次的視圖:降低性能;

優化器可能會放棄使用索引。

只要可能考慮使用連接代替子查詢;

使用物化視圖或者維護一個聚集表;

19.非自治事務中的事務控制,數據中斷的威脅;

在無PRAGMA AUTONOMOUS TRANSACTION的事務中commit和rollback。

20.觸發器依賴于執行的順序

觸發器依賴于其他觸發器,如log/audit由其他觸發器完成;

打包相互依賴的商業邏輯到存儲過程中,在然后在觸發器中調用過程;

將內部相互依賴的過程組合成一個觸發器;

確保語句級觸發器在行級觸發器后執行。

21.使用Sequence nextval而沒有curval:數據中斷的威脅;

不要使用currval作為上下文讀取,顯示傳遞ID或使用sys_context;

序列是批分配的,currval+1不一定等于nextval。

22.使用序列作為計數器,數據中斷的威脅;

23.在常量上使用綁定變量:降低性能;

24.對存在的檢查使用計算列(聚集):降低性能

在內查詢中計算聚集,然后在外查詢再將計算的值與某些值比較,這會導致聚集值被拋棄;

25.為流程控制使用異常:數據中斷的威脅;

--使用exception when XXX then blocks而不是錯誤處理;

exception中僅處理錯誤。

26.日期列(截去時間)比較,數據中斷的威脅;

27.對不存在的值使用0-1之類的數字:使系統難以使用;

對于一些判斷情況,通常使用0,1,-1之類的表示,很難理解;

使用null表示不存在,未知。

28.對于連續的作業不使用專用包:使系統難以使用;

作業的內容是使包體中的一個過程,函數;

29.將任何東西都打包到存儲過程中,Ref Cursor用來讀數據,使系統難以使用;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美中文免费| 欧美黑人巨大xxx极品| 日韩风俗一区 二区| 亚洲国产成人精品久久久国产成人一区| 亚洲精品久久久久中文字幕二区| 成人疯狂猛交xxx| 午夜精品蜜臀一区二区三区免费| 日韩在线国产精品| 精品久久久久人成| 日韩激情视频在线| 日韩欧美一区视频| 国产午夜精品免费一区二区三区| 国产精品成人v| 国产精品久久久久91| 91国产中文字幕| 国产精品日韩在线一区| 亚洲视频一区二区| 668精品在线视频| 欧美电影《睫毛膏》| 欧美在线不卡区| 欧美精品video| www高清在线视频日韩欧美| 日韩av中文字幕在线| 亚洲美女在线视频| 成人免费高清完整版在线观看| 久久亚洲综合国产精品99麻豆精品福利| 日韩av中文字幕在线免费观看| 欧美成aaa人片在线观看蜜臀| 久久久久久国产精品三级玉女聊斋| 91中文字幕一区| 欧美丰满少妇xxxxx| 日韩大胆人体377p| 这里只有精品视频| 国产综合在线观看视频| 欧美黑人性猛交| 久久中文字幕在线视频| 国产在线观看一区二区三区| 欧美精品18videosex性欧美| 裸体女人亚洲精品一区| 国产区精品在线观看| 自拍偷拍亚洲区| 狠狠躁夜夜躁人人躁婷婷91| 国产精品高潮呻吟久久av黑人| 成人观看高清在线观看免费| 久久国产精品99国产精| 国产精品久久av| 中文字幕精品视频| 中文综合在线观看| 成人写真视频福利网| 国产精品欧美激情在线播放| 欧美性在线视频| 欧美中文字幕精品| 久久久亚洲福利精品午夜| 精品久久久久久久久中文字幕| 国产亚洲欧美日韩美女| 精品欧美国产一区二区三区| 欧美特黄级在线| 成人激情电影一区二区| 久久久久久久久久久亚洲| 国产aⅴ夜夜欢一区二区三区| 国产精品美女在线| 亚洲男人天堂视频| 91九色综合久久| 国产97人人超碰caoprom| 国产精品久久一区主播| 日韩在线视频观看| 91av在线播放| 亚洲免费电影一区| 亚洲视频日韩精品| 色综合色综合久久综合频道88| 日韩欧美在线视频观看| 人人爽久久涩噜噜噜网站| 日韩欧美国产高清91| 日韩女优在线播放| 久久99精品久久久久久噜噜| 三级精品视频久久久久| 亚洲欧美日韩综合| 久久久亚洲欧洲日产国码aⅴ| 欧美日韩性视频在线| 日韩在线观看高清| 国产精品美女在线| 亚洲欧美日韩第一区| 国产亚洲精品久久久久久牛牛| 国产精品精品一区二区三区午夜版| 亚洲欧美一区二区三区久久| 欧美成人黑人xx视频免费观看| 亚洲国产欧美久久| 欧美精品videofree1080p| 国产亚洲欧美日韩精品| 国模视频一区二区三区| 亚洲国产精彩中文乱码av| 久久久久国产精品www| 亚洲欧美在线播放| 久久久久久久久久久久久久久久久久av| 色综合色综合网色综合| 欧美视频在线观看免费网址| 精品视频在线观看日韩| 亚洲精品色婷婷福利天堂| 国产精品久久久久久久久久东京| 欧美日韩在线观看视频| 大量国产精品视频| 九九久久久久久久久激情| 2024亚洲男人天堂| 大桥未久av一区二区三区| 免费99精品国产自在在线| 2018国产精品视频| 久久伊人免费视频| 综合国产在线视频| 国产精品99久久久久久久久| 欧美日韩在线视频观看| 国产在线拍偷自揄拍精品| 91在线国产电影| 欧美成人合集magnet| 日韩av免费一区| 97超级碰在线看视频免费在线看| 亚洲自拍偷拍色片视频| 日韩高清电影免费观看完整版| 国内精品美女av在线播放| 国产精品福利久久久| 亚洲天堂2020| 综合136福利视频在线| 日韩在线观看av| 91高清视频在线免费观看| 欧美一区二区三区免费视| 最近免费中文字幕视频2019| 亚洲老板91色精品久久| 丝袜美腿亚洲一区二区| 亚洲第一页中文字幕| 日韩精品中文字幕视频在线| 亚洲欧洲xxxx| 热99精品只有里视频精品| 亚洲女人天堂网| 欧美日韩国产精品一区二区不卡中文| 久久久欧美一区二区| 日韩久久免费电影| 国产视频欧美视频| 亚洲成人av片在线观看| 久久久99免费视频| 欧美一区亚洲一区| 欧美日韩免费一区| 亚洲综合在线做性| 乱亲女秽乱长久久久| 亚洲天堂成人在线| 国产成人综合一区二区三区| 亚洲片国产一区一级在线观看| 亚洲欧美国产另类| 色噜噜狠狠狠综合曰曰曰| 亚洲欧洲在线观看| 久久中文字幕在线| 亚洲人成在线观看| 91亚洲国产成人久久精品网站| 日韩av在线最新| 亚洲精品久久久久久久久久久| 最近2019中文字幕一页二页| 2019中文字幕在线免费观看| 亚洲美女精品成人在线视频| 国产精品无码专区在线观看| 精品久久久一区二区| 国产精品免费视频xxxx| 欧美激情视频一区| 欧美激情成人在线视频| 91在线网站视频| 成人免费观看网址| 欧美精品激情在线观看|