>進(jìn)入 之前寫(xiě)過(guò)一篇博客,叫:Oracle PL/SQL 從if 到 then的藝術(shù)鑒賞,地址:點(diǎn)擊打開(kāi)鏈接 現(xiàn)在范圍擴(kuò)展至每個(gè)平行的IF條件,是否應(yīng)該注意點(diǎn)啥 在條件是平行的時(shí)候,是否IF一定是可以無(wú)序的呢? 先看個(gè)" />
歡迎進(jìn)入Oracle社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入 之前寫(xiě)過(guò)一篇博客,叫:Oracle PL/SQL 從if 到 then的"藝術(shù)鑒賞",地址:點(diǎn)擊打開(kāi)鏈接 現(xiàn)在范圍擴(kuò)展至每個(gè)平行的IF條件,是否應(yīng)該注意點(diǎn)啥 在條件是平行的時(shí)候,是否IF一定是可以無(wú)序的呢? 先看個(gè)小
歡迎進(jìn)入Oracle社區(qū)論壇,與200萬(wàn)技術(shù)人員互動(dòng)交流 >>進(jìn)入
之前寫(xiě)過(guò)一篇博客,叫:Oracle PL/SQL 從if 到 then的"藝術(shù)鑒賞",地址:點(diǎn)擊打開(kāi)鏈接
現(xiàn)在范圍擴(kuò)展至每個(gè)平行的IF條件,是否應(yīng)該注意點(diǎn)啥
在條件是平行的時(shí)候,是否IF一定是可以無(wú)序的呢?
先看個(gè)小實(shí)驗(yàn):
[sql]
hr@ORCL> ed
Wrote file afiedt.buf
1 create or replace procedure p_test_if(p_num pls_integer)
2 as
3 v_num PLS_INTEGER:=p_num;
4 begin
5 for i in 11000000
6 loop
7 if p_num=1
8 then
9 v_num:=p_num+1;
10 elsif p_num=2
11 then
12 v_num:=p_num+1;
13 elsif p_num=3
14 then
15 v_num:=p_num+1;
16 else
17 v_num:=p_num+1;
18 end if;
19 end loop;
20* end p_test_if;
hr@ORCL> /
Procedure created.
hr@ORCL> set timing on
hr@ORCL> exec p_test_if(1);
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.13
hr@ORCL> exec p_test_if(2);
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.18
hr@ORCL> exec p_test_if(3);
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.25
三次調(diào)用的時(shí)間都不相同,調(diào)用值落在IF邏輯越靠前,查詢?cè)娇焖僭砥鋵?shí)很簡(jiǎn)單,條件靠前可以減少判斷的次數(shù),因?yàn)闈M足條件后不會(huì)再?lài)L試后面的表達(dá)式所以,即便IF邏輯是平行的,也會(huì)根據(jù)調(diào)用PL/SQL過(guò)程或函數(shù)的入?yún)⒌闹档姆植记闆r來(lái)決定IF的順序入?yún)⒃绞穷l繁調(diào)用的值,對(duì)應(yīng)的IF邏輯就越需要靠前因?yàn)镺racle對(duì)IF的調(diào)用是靠前的調(diào)用執(zhí)行的更快速
這個(gè)告訴我們,在PL/SQL開(kāi)發(fā)中,對(duì)經(jīng)常調(diào)用的函數(shù)或過(guò)程的輸入值的分布范圍最好有一定的了解對(duì)經(jīng)常要輸入的參數(shù)條件,代碼中要放在IF的前面,會(huì)有一定的性能提高。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com