oracle的几种循环示例

版权声明:。。。 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;

猜你喜欢

转载自blog.csdn.net/JerryITGO/article/details/78810632