Oracle for in loop
循環的一些實例,以作學習和加強使用熟練度及場景應用.
一些技巧
for
語句后面的loop end loop
可以類比成c#/java
等編程語言for
語句后面的語句塊符號(花括號{}
), 以便理解和使用.
一些實例
循環輸出數值
-- 循環輸出數值
begin
for i in 1 .. 100 loop
sys.dbms_output.put_line(i);
end loop;
end;
循環累加
-- 循環累加
declare
var_sum number := 0;
begin
for i in 1 .. 100 loop
var_sum := var_sum + i;
end loop;
sys.dbms_output.put_line(var_sum); -- 5050
end;
批量插入
-- 批量插入
begin
for i in 1 .. 100 loop
-- todo: insert into some_table(field1, field2, ..., fieldN) values(valie1, value2, ..., valueN);
sys.dbms_output.put_line('insert: ' || to_char(i));
end loop;
commit;
sys.dbms_output.put_line('多次insert,統一commit');
end;
批量更新
-- 批量更新
begin
for i in 1 .. 100 loop
-- todo: update some_table set fieldN = valueN where fieldN = valueN;
sys.dbms_output.put_line('update: ' || to_char(i));
end loop;
commit;
sys.dbms_output.put_line('多次update,統一commit');
end;
循環輸出用戶表信息
-- 查詢你能管理的所有用戶信息
select user_id, username, created from all_users;
-- 循環輸出用戶表信息
begin
for cur_row in (select user_id, username, created from all_users) loop
sys.dbms_output.put_line(cur_row.username);
end loop;
end;
-- 當循環對象是比較長串的SQL時,建議提取游標,方便后續查看和維護
循環輸出用戶表信息(游標提取)
-- 循環輸出用戶表信息(游標提取)
declare
-- 提取游標對象,方便單獨維護SQL
cursor cursor_all_users is
select user_id, username, created from all_users;
-- 游標子項(更多的時候,表是動態表,所以這句聲明也可以省略)
-- cursor_user all_users%rowtype;
begin
for cursor_user in cursor_all_users loop
dbms_output.put_line(cursor_user.username);
end loop;
end;