版权声明:。。。 https://blog.csdn.net/JerryITGO/article/details/78810632
oracle的几种循环示例
文章目录
GOTO用法
DECLARE
x NUMBER;
BEGIN
x := 0;
<<repeat_loop>>
--循环点
x := x + 1;
DBMS_OUTPUT.PUT_LINE(X);
IF x < 9 THEN --当x的值小于9时,就goto到repeat_loop
GOTO repeat_loop;
END IF;
END;
FOR循环用法
DECLARE
x number;-- 声明变量
BEGIN
x := 1;-- 初始值
FOR x IN REVERSE 1..10 LOOP
-- REVERSE由大到小
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END LOOP;
DBMS_OUTPUT.PUT_LINE('end loop x= '|| x); -- x = 1
END;
WHILE循环用法
DECLARE
x number;-- 声明变量
BEGIN
x := 0;-- 初始值
WHILE x < 9 LOOP
x := x + 1;
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END LOOP;
DBMS_OUTPUT.PUT_LINE('end loop x= '|| x); -- x = 1
END;
LOOP循环用法
DECLARE
x number;-- 声明变量
BEGIN
x := 0;-- 初始值
LOOP
x := x + 1;
EXIT WHEN x > 9;
DBMS_OUTPUT.PUT_LINE('x = ' || x);
END LOOP;
DBMS_OUTPUT.PUT_LINE('end loop x= '|| x); -- x = 1
END;
进阶用法一:用LOOP循环遍历游标
-- 进阶用法一:用LOOP循环遍历游标
DECLARE
CURSOR v_cursor IS
SELECT * FROM DIM_EMPLOYEE;-- 定义游标
v_rowtype v_cursor%ROWTYPE;-- 定义行变量
BEGIN
OPEN v_cursor;-- 开启游标
LOOP
FETCH v_cursor INTO v_rowtype ;
EXIT WHEN v_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_lINE(v_rowtype.emp_name);
END LOOP;
CLOSE v_cursor;-- 关闭游标
END;
进阶用法二:用FOR遍历游标
-- 进阶用法二:用FOR遍历游标
DECLARE
CURSOR v_cursor IS
SELECT * FROM DIM_EMPLOYE;-- 定义游标
--v_rowtype v_cursor%ROWTYPE;-- 定义行变量,在FOR循环中这一个也可以不定义,FOR循环会默认定义
BEGIN
FOR v_rowtype IN v_cursor LOOP
DBMS_OUTPUT.PUT_lINE(v_rowtype.emp_name);
END LOOP;
END;
进阶用法三:用WHILE遍历游标
-- 进阶用法三:用WHILE遍历游标
DECLARE
CURSOR v_cursor IS
SELECT * FROM DIM_EMPLOYEE;-- 定义游标
v_rowtype v_cursor%ROWTYPE;-- 定义行变量
BEGIN
OPEN v_cursor;-- 开启游标
FETCH v_cursor INTO v_rowtype;-- 启用游标并取值
WHILE (v_cursor%FOUND) LOOP-- 启用后才能进来
DBMS_OUTPUT.PUT_lINE(v_rowtype.emp_name);-- 由于启用时取了一次值了,所以这句排在前面,先使用初始化时启用的游标
FETCH v_cursor INTO v_rowtype; -- 游标下移并取值
END LOOP;
CLOSE v_cursor;-- 关闭游标
END;
进阶用法四:可传参的cursor
-- 进阶用法四:可传参的cursor
DECLARE
CURSOR v_cursor(v_emp_name in varchar2) IS
SELECT * FROM DIM_EMPLOYEE
where emp_name like v_emp_name;-- 定义游标
v_rowtype v_cursor%ROWTYPE;-- 定义行变量
v_cnt number := 0;
BEGIN
open v_cursor('%红%');
loop
fetch v_cursor into v_rowtype;
exit when v_cursor%notfound;
v_cnt := v_cnt + 1;
DBMS_OUTPUT.PUT_lINE(v_cnt || '---' || v_rowtype.emp_name);-- 由于启用时取了一次值了,所以这句排在前面,先使用初始化时启用的游标
end loop;
close v_cursor;
END;