您的位置:首页 > 数据库 > Oracle

Oracle中调用带有返回参数的存储过程

2017-07-19 11:50 246 查看
--创建测试

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(V_STR      IN VARCHAR,

                                      UPD_ROWS   OUT NUMBER,

                                      INSET_ROWS OUT NUMBER) IS

  UPDATE_ROWS NUMBER(10) := 0;

  INSERT_ROWS NUMBER(10) := 0;

  CURSOR CURSOR_EMP IS

    SELECT EMPNO, ENAME FROM EMP;

  CUR_EMP_OBJ CURSOR_EMP%ROWTYPE;

BEGIN

  ---循环的第一种写法

  FOR CUR_EMP_OBJ IN CURSOR_EMP LOOP

 

    UPDATE EMP E

       SET E.ENAME = E.ENAME || '1'

     WHERE E.EMPNO = CUR_EMP_OBJ.EMPNO;

     

    UPDATE_ROWS := UPDATE_ROWS + 1;

  END LOOP;

  UPD_ROWS   := UPDATE_ROWS;--返回更新的条数

  INSET_ROWS := 10; --返回插入的条数

  DBMS_OUTPUT.PUT_LINE('UPDATE_ROWS:' || UPDATE_ROWS);

  COMMIT;

  --异常处理

EXCEPTION

  WHEN OTHERS THEN

    BEGIN

      ROLLBACK;

      RAISE_APPLICATION_ERROR(-20002,

                              '执行异常:' || SQLCODE || '],原始错误信息是[' || SQLERRM || '].');

    END;

END;

--调用测试存储过程方法一在commnd 窗口中执行


SQL> set serveroutput on

SQL> var return_up_rows number;

SQL> var return_inset_rows number;

SQL> exec  PROC_TEST('AAAA',:return_up_rows,:return_inset_rows);

--调用测试存储过程方法二

DECLARE

  V_STR             VARCHAR2(10) := 'AAA';

  RETURN_UP_ROWS NUMBER(10);

  RETURN_INSET_ROWS NUMBER(10);

BEGIN

  PROC_TEST(V_STR,RETURN_UP_ROWS, RETURN_INSET_ROWS);

 

  DBMS_OUTPUT.PUT_LINE('更新条数:' || RETURN_UP_ROWS);

  DBMS_OUTPUT.PUT_LINE('插入条数:' || RETURN_INSET_ROWS);

END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息