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;
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;
相关文章推荐
- MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
- Oracle存储过程之带有返回参数
- JAVA调用ORACLE带数组输入参数和返回游标结果集的存储过程
- 【Mybatis】MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别
- oracle :带有out参数的存储过程的调用方法
- c# 调用带有参数的存储过程方法--oracle【转载】
- C#调用Oracle带有out游标参数存储过程的问题
- oracle在job中调用带有参数的存储过程
- oracle中存储过程调用存储过程(带有返回结果集)
- 调用带参数的存储过程,并返回结果集--oracle
- Java 调用 Oracle 存储过程返回结果集
- java 调用oracle 分页存储过程 返回游标数据集
- oracle动态sql:存储过程中动态调用存储过程,并且动态调用的存储过程出参数游标
- Java调用SQL Server存储过程同时返回参数和结果集
- Oracle 中调试、调用(带参数的)存储过程
- 如何在Delphi中调用oracle的存储过程返回数据集
- .net中调用存储过程的示例 带有输出参数
- 最完整的:JAVA调用ORACLE的存储过程、函数的返回结果集例子
- Hibernate3调用带返回参数的mysql存储过程
- oracle调用存储过程和函数返回结果集