cursor cursor2 is select kmh,kmye from a_kmyeb;
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到赤峰網(wǎng)站設(shè)計(jì)與赤峰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋赤峰地區(qū)。
你這是定義變量。
請(qǐng)放在
cursor cursor1 is select zbh,zbgs from a_zbgsb;
后
這是什么規(guī)則?為什么沒(méi)有
1,3,1
1,3,2
1,3,3
還有,要是按你那么說(shuō),為什么最后一列里有2的出現(xiàn),bflag里也沒(méi)有等于2的呀?
按照那三句描述揣測(cè)出來(lái)代碼可以大致改為如下形式:
CREATE?OR?REPLACE?PROCEDURE?PRO_YGZC
IS
BEGIN
FOR?RCD_T1?IN?(
SELECT?HL16,HL1,BS,REQUESTID,HL10,HL15?FROM?表1)
LOOP
FOR?RCD_TAB?IN?(
SELECT?column_value?AS?oacode?FROM?TABLE(SplitStr(RCD_T1.HL16,?','))?--表1里面的某個(gè)字段需要拆分
)LOOP
FOR?RCD_T2?IN?(
select?t.workcode?from?表2?t
where?t.id?=?to_number(RCD_TAB.oacode)
)LOOP
if?RCD_T2.workcode?is?not?null?and?RCD_T1.HL1?is?not?null?and?RCD_T1.BS?=?'0'?then
INSERT?INTO?表3
(C_FLOWID,
C_EMPCODE,
C_OPERATETIME,
C_REASON,
C_DATE,
C_STATUS,
C_SYNFLAG)
VALUES
(RCD_T1.REQUESTID,
RCD_T2.workcode,
sysdate,
RCD_T1.HL10,
to_date(RCD_T1.HL15,?'yyyy-mm-dd'),
'1',
'0');
ELSE
NULL;--是否應(yīng)該日志記錄或反饋異常?
END?IF;
END?LOOP;
END?LOOP;
END?LOOP;
END;
LOOP SAVEPOINT signsavepoint; BEGIN OPEN c_truck; eventkeylist := ''; truckeylist := ''; LOOP FETCH c_truck INTO backtruckkey, backeventlogkey; EXIT WHEN c_truck%NOTFOUND; IF eventkeylist = '' AND truckeylist = '' THEN eventkeylist := '''' || eventkeylist || ''''; truckeylist := '''' || backtruckkey || ''''; ELSE eventkeylist := ',''' || eventkeylist || ''''; truckeylist := ',''' || backtruckkey || ''''; END IF; END LOOP; CLOSE c_truck; END; END LOOP; 給個(gè)簡(jiǎn)單的例子作為參考
外循環(huán)i 從1取到100,內(nèi)循環(huán)j 從1取到100。
你可以想象一下執(zhí)行步驟:
①i=1
j從1取到100,result都不會(huì)等于500,故內(nèi)循環(huán)完全執(zhí)行。即下一個(gè)外循環(huán)之前的result應(yīng)該是1*100(i=1,j=100)。
②接下來(lái):i=2,類似i=1,result500,故最后打印出來(lái)的result=200.
③一直到:i=5,result=500的時(shí)候內(nèi)循環(huán)也執(zhí)行完了。
④當(dāng)i=6,7,8,9,i*j永遠(yuǎn)不會(huì)等于500,故每次內(nèi)循環(huán)都執(zhí)行完畢才打印result,因此result依次等于600,700,800,900.
⑤當(dāng)i=10,內(nèi)循環(huán)j=50的時(shí)候,result=500,這時(shí)候(exit when result=500),所以跳出本次內(nèi)循環(huán),接著執(zhí)行下一個(gè)外循環(huán)i=11.
⑥……等等 往下你可以思考一下,有哪些i會(huì)使內(nèi)循環(huán)提前跳出?
對(duì),很聰明,當(dāng)i是500的約數(shù)的時(shí)候,內(nèi)循環(huán)中會(huì)產(chǎn)生等于500的result,所以會(huì)提前跳出內(nèi)循環(huán)。
同理,當(dāng)i*j=1000的時(shí)候跳出外循環(huán),也就是整個(gè)循環(huán)。最早發(fā)生的應(yīng)該是i=10,j=100,但i=10的時(shí)候,不等j取到100的時(shí)候result會(huì)取到500(i=10,j=50),因此這個(gè)被pass掉。
這種情況也要求i是1000的約數(shù),由于5001000,當(dāng)i同時(shí)是500和1000的約數(shù)的時(shí)候,不等result=1000,result=500的時(shí)候就跳出內(nèi)循環(huán)了,result是取不到1000的。
因此我們要找的是能整除1000而不能整除500的自然數(shù)里面最小的那個(gè)!
于是,i=40!
于是,當(dāng)i=40,j=25的時(shí)候會(huì)跳出循環(huán)。上一個(gè)打印的時(shí)候i=39,j=100.
其實(shí)嵌套循環(huán)就是循環(huán)里面套循環(huán),這個(gè)只不過(guò)是加上了循環(huán)控制標(biāo)識(shí)outer和inner(放在for前面,用于標(biāo)記是哪個(gè)循環(huán),里面的名字可以隨便起),這樣一來(lái),我們就可以通過(guò)exit outer/inner…語(yǔ)句來(lái)控制跳出哪個(gè)循環(huán)了。