oracle 存储过程执行体中循环的两种写法

--创建测试表

create table EMP (EMPNO number , ENAME varchar2(32) );

insert into EMP (EMPNO ,ENAME) values (10,'张三');

insert into EMP (EMPNO ,ENAME) values (20,'小马');

insert into EMP (EMPNO ,ENAME) values (30,'小米');

insert into EMP (EMPNO ,ENAME) values (40,'小明');


--创建存储过程

CREATE OR REPLACE PROCEDURE PROC_TEST IS

  CURSOR CURSOR_EMP IS
    SELECT EMPNO,ENAME FROM EMP;
  CUR_EMP_OBJ CURSOR_EMP%ROWTYPE;
BEGIN
  ---循环的第一种写法
  FOR CUR_EMP_OBJ IN CURSOR_EMP LOOP
    DBMS_OUTPUT.PUT_LINE('循环的第一种写法-FOR IN:' || CUR_EMP_OBJ.EMPNO || ' ' ||
                         CUR_EMP_OBJ.ENAME);
  END LOOP;

  ---循环的第二种写法
  OPEN CURSOR_EMP;
  LOOP
    FETCH CURSOR_EMP
      INTO CUR_EMP_OBJ;
    EXIT WHEN CURSOR_EMP%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE('循环的第二种写法-FETCH INTO :' || CUR_EMP_OBJ.EMPNO || ' ' ||
                         CUR_EMP_OBJ.ENAME);
  END LOOP;
  CLOSE CURSOR_EMP;

  --异常处理
EXCEPTION
  WHEN OTHERS THEN
    BEGIN
      ROLLBACK;
      RAISE_APPLICATION_ERROR(-20002,
                              '执行异常:' || SQLCODE || '],原始错误信息是[' || SQLERRM || '].');
    END;
END;

说明:  要显示输出内容,需要打开内容输出窗口,在打开Commnd窗口中先输入  set serveroutput on ,然后在执行存储过程。


你可能感兴趣的:(oracle知识点)