oracle_循环loop, 游标cursor
2012-09-18 15:38
363 查看
LOOP(循环):
CURSOR(游标):
定义和初始化分开:
返回系统游标:
一,continue
在oracle11g以前无法使用continue实现退出当前循环(11g中据说实现了),但是可以用以下方法模拟实现:
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
for j in 1..1 loop --假循环,目的是模拟出continue效果
if i = 6 then
exit;--这个exit相当于continue
end if ;
dbms_output.put_line(i);
end loop ;
end loop;
dbms_output.put_line('over');
end ;
在oracle11g中可以用以下方式实现:
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
if i = 6 then
continue;--用if语句和continue实现
end if ;
dbms_output.put_line(i);
end loop;
dbms_output.put_line('over');
end ;
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
continue when i = 6;--用continue when实现
dbms_output.put_line(i);
end loop;
dbms_output.put_line('over');
end ;
二,break
oracle中并没有break关键字,但是可以用exit关键字来代替break实现退出循环
declare
--定义变量
begin
for i in 1..10 loop
if i > 6 then
exit ;--退出循环,相当于break
end if ;
dbms_output.put_line(i);
end loop ;
dbms_output.put_line('over');
end ;
declare l_i number:=1; --循环变量. begin --循环1到10里面的数据. for i in reverse 1..10 loop --reverse 可控制倒序循环 dbms_output.put_line(to_char(sysdate,'HH24:mi:ss')); dbms_output.put_line(i); end loop; --循环表里查出来的数据. for i in(select rownum from user_objects uo where rownum<10) loop dbms_output.put_line(to_char(sysdate,'HH24:mi:ss')); dbms_output.put_line(i.rownum); --此时的i是一个对像.你可以选择对像的属性. end loop; --while循环.为false就退出循环. while l_i!=11 loop dbms_output.put_line(l_i); l_i:=l_i+1; end loop; --给循环添加退出条件. l_i:=1; loop --eixt; 可以跳出当前循环. exit when l_i=10; --循环退出条件. dbms_output.put_line(l_i); l_i:=l_i+1; end loop; end;
CURSOR(游标):
--游标不能打开多次. -- %NOTFOUND 执行行没有找到。 -- %FOUND 执行行找到 -- %ROWCOUNT 游标影响行数 -- %ISOPEN 当前游标是否打开 CREATE OR REPLACE PROCEDURE test_cursor( i_name IN user_data_base.user_data_name%TYPE --传入名字 ) IS CURSOR v_refcursor IS SELECT t.user_data_id, t.user_data_nick FROM user_data_base t WHERE t.user_data_name = i_name; --游标查询语句 v_gid user_data_base.user_data_id%TYPE; v_nick user_data_base.user_data_nick%TYPE; BEGIN IF v_refcursor%ISOPEN THEN --打开时先验证是否打开过. CLOSE v_refcursor; END IF; OPEN v_refcursor; --打开游标.打开游标才会执行上面的SELECT语句. dbms_output.put_line(v_refcursor%ROWCOUNT); LOOP FETCH v_refcursor INTO v_gid, v_nick; --把游标的值写入变量. EXIT WHEN v_refcursor%NOTFOUND; --没找到数据.退出条件. dbms_output.put_line(v_refcursor%ROWCOUNT); --%ROWCOUNT是当前影响行数. 类似for里的i dbms_output.put_line('ID:'||v_gid||' NICK:'||v_nick); END LOOP; CLOSE v_refcursor; --关闭游标. END;
定义和初始化分开:
CREATE OR REPLACE PROCEDURE test_cursor( i_name IN user_data_base.user_data_name%TYPE --传入名字 ) IS TYPE t_cursor IS REF CURSOR; --定义游标类型. v_cursor t_cursor; --定放游标 BEGIN IF NOT v_cursor%ISOPEN THEN OPEN v_cursor FOR SELECT t.user_data_id, t.user_data_nick FROM user_data_base t WHERE t.user_data_name = i_name; END IF; END;
返回系统游标:
CREATE OR REPLACE PROCEDURE test_cursor( v_cursor OUT SYS_REFCURSOR --返回系统游标 ) IS BEGIN OPEN v_cursor FOR SELECT t.gid FROM TEST_TBL t WHERE t.name = 'AAA'; END;
一,continue
在oracle11g以前无法使用continue实现退出当前循环(11g中据说实现了),但是可以用以下方法模拟实现:
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
for j in 1..1 loop --假循环,目的是模拟出continue效果
if i = 6 then
exit;--这个exit相当于continue
end if ;
dbms_output.put_line(i);
end loop ;
end loop;
dbms_output.put_line('over');
end ;
在oracle11g中可以用以下方式实现:
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
if i = 6 then
continue;--用if语句和continue实现
end if ;
dbms_output.put_line(i);
end loop;
dbms_output.put_line('over');
end ;
declare
--定义变量
begin
for i in 1..10 loop --真正的循环
continue when i = 6;--用continue when实现
dbms_output.put_line(i);
end loop;
dbms_output.put_line('over');
end ;
二,break
oracle中并没有break关键字,但是可以用exit关键字来代替break实现退出循环
declare
--定义变量
begin
for i in 1..10 loop
if i > 6 then
exit ;--退出循环,相当于break
end if ;
dbms_output.put_line(i);
end loop ;
dbms_output.put_line('over');
end ;
相关文章推荐
- PLSQL 循环游标 cursor loop fetch into
- Oracle学习11:游标(cursor)--显式游标&隐式游标、游标四个属性、循环遍历
- Oracle PLSQL Demo - 10.For Loop遍历游标[FOR LOOP CURSOR]
- PLSQL 循环游标 cursor loop fetch into
- oracle for loop循环以及游标循环
- PLSQL 循环游标 cursor loop fetch into【转载】
- PLSQL 循环游标 cursor loop fetch into【转载】
- MYSQL存储过程循环CURSOR(游标)使用
- Oracle/PLSQL: CURSOR FOR Loop
- oracle游标(CURSOR)
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常,
- Oracle 遍历游标循环更新
- Oracle PL/SQL cursor(游标)
- 游标 cursor 使用方法 循环 取出 单条 信息
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标、异常等
- Oracle PL/SQL之LOOP循环控制语句
- oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常
- oracle:游标操作,cursor
- python 通过循环游标取oracle中的数据
- Oracle Cursor 游标