1. 程式人生 > >Oracle中的for和while循環

Oracle中的for和while循環

current tle 過程 while循環 let lob -- when rom

實例:

begin
for i in 51..500 loop
delete from test t where t.date=to_date(‘2016-07-01‘, ‘yyyy-MM-dd‘) and t.name like (‘%‘||i);-------oracle使用||作為連接符

update test t set t.code=(‘TEXT-0000-2-‘||lpad(1,3,‘0‘)) ,t.name=replace(t.name,‘3001‘,‘0000‘) where to_char(t.date,‘YYYYMM‘)=‘201606‘;---------lpad補位函數、replace替換函數、to_char日期轉換函數
commit;
end loop;
end;

有兩種方式可以實現條件循環
一、for 變量 in 開始數值...結束數值 loop end loop;
二、while 條件 loop end loop;

loop的使用方式:
一、X := 100;
LOOP
X := X + 10;
IF X > 1000 THEN
EXIT;
END IF END LOOP;
Y := X;
二、 X := 100;
LOOP
X := X + 10;
EXIT WHEN X > 1000;
X := X + 10;
END LOOP;
Y := X;

還有一個GOTO的使用,在後面的過程中會有的,用來產生錯誤日誌。

以下是一個非常簡單的過程,用來熟悉循環的!

create or replace procedure count_number is
/*
功能描述:計算計算出1到100的和
t的值為和
*/

i number(10);
t number(10);

begin
/*
i := 1;
t := 0;
--用while+loop實現
/*begin
while i <= 100 loop
t := t + i;
i := i + 1;
end loop;
end;
*/
i := 1;
t := 0;
--用for實現

begin
for i in 1 .. 100 loop
t := t + i;

end loop;
end;

end count_number;

for循環:


[PL/SQL] 用For Loop 替代Cursor
http://www.itwenzhai.com/data/2006/0523/article_9377.htm
http://blog.csdn.net/heyday/archive/2005/07/27/435804.aspx
CURSOR FOR Loop
FOR employee_rec in c1 ---employee_rec直接用,不用提前定義
LOOP
total_val := total_val + employee_rec.monthly_income;
END LOOP;
當使用CURSOR FOR Loop時,不用我手工open cursor close cursor
應用:
begin
FOR emm IN ( SELECT ro_site, ns_site, product_line, wh_type
FROM eis_hq_invhl_mail_data
WHERE report_type = ‘Detailed‘ )
LOOP
DBMS_OUTPUT.put_line( emm.product_line );
eis_hq_invhl_pkg.make_mail_detailed_data
( p_ro_site => emm.ro_site,
p_ns_site => emm.ns_site,
p_product_line => emm.product_line,
p_wh_type => emm.wh_type,
p_current_day => to_date(‘2005-11-07‘,‘yyyy-MM-dd‘) );
END LOOP;
end;
存儲過程DIY2----遊標與循環
http://blog.csdn.net/brave1/archive/2005/06/08/390160.aspx

while循環:
WHILE( i <= CEIL( LENGTH( p_clob_data ) / 4000 ))
LOOP
v_clob_data := TRIM( SUBSTR( p_clob_data,
i * 4000,
4000 ));
DBMS_OUTPUT.put_line( SUBSTR( v_clob_data,
0,
255 ));

i := i + 1;
END LOOP;

Oracle中的for和while循環