转:http://blog.csdn.net/aqszhuaihuai/article/details/6241291
Oracle存储过程:
语法:
CREATE [OR REPLACE] PROCEDURE procedure_name
(arg1 [mode1] datatype1,arg2 [mode2] datatype2,...)
IS [AS]
PL/SQL BLOCK;
mode用于指定输入输出参数:IN为输入参数,OUT为输出参数,当为输入参数时可以省去IN,OUT不能省去。
如果没有输入输出参数,可以省去
(arg1 [mode1] datatype1,arg2 [mode2] datatype2,...)这一行
一个带有输入,输出参数的简单的例子
- CREATE OR REPLACE PROCEDURE proc_in_out_test(var_empno NUMBER,
- var_ename OUT VARCHAR2) IS
- BEGIN
- SELECT ename INTO var_ename FROM emp WHERE empno = var_empno;
- EXCEPTION
- WHEN no_data_found THEN
- raise_application_error(-20000, '该员工不存在');
- END;
调用该过程
- SQL> var vempno number;
- SQL> var vename varchar2(10);
- SQL> exec :vempno:=7934;
- SQL> exec proc_in_out_test(:vempno,:vename);
- PL/SQL procedure successfully completed
- vename
- ---------
- MILLER
- SQL> exec :vempno:=7935;
- SQL> exec proc_in_out_test(:vempno,:vename);
- begin proc_in_out_test(:vempno,:vename); end;
- ORA-20000: 该员工不存在
- ORA-06512: 在 "SCOTT.PROC_IN_OUT_TEST", line 7
- ORA-06512: 在 line 1
显示游标语法:
CURSOR cursor_name IS select_statement
一个简单的例子:
- DECLARE
- v_empname emp.ename%TYPE;
- v_job emp.job%TYPE;
- v_deptno emp.deptno%TYPE;
- CURSOR emp_test IS --声明游标
- SELECT ename, job FROM emp WHERE deptno = v_deptno;
- BEGIN
- v_deptno := 10;
- OPEN emp_test; --打开游标
- --循环游标
- LOOP
- FETCH emp_test
- INTO v_empname, v_job; --取值
- EXIT WHEN emp_test%NOTFOUND; --当没有记录时退出循环
- dbms_output.put_line('empname=' || v_empname || ',job=' || v_job);
- END LOOP;
- CLOSE emp_test;
- END;
- --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT;
- --%FOUND:已检索到记录时,返回true
- --%NOTFOUNRD:检索不到记录时,返回true
- --%ISOPEN:游标已打开时返回true
- --%ROWCOUNT:代表检索的记录数,从1开始
参数化游标只是声明方式和打开游标时有些不同
CURSOR emp_test2(p_deptno emp.deptno%TYPE) IS --声明游标
SELECT ename, job FROM emp WHERE deptno = p_deptno;
OPEN emp_test2(10); --打开游标
游标变量:
定义游标变更类型
TYPE type_name IS REF CURSOR[RETURN return_type];
- CREATE OR REPLACE PROCEDURE cursorvariabletest(p_table IN VARCHAR2) IS
- TYPE t_emp_dept IS REF CURSOR; --定义游标变量类型
- v_cursorvar t_emp_dept; --声明游标变量
- v_empno emp.empno%TYPE;
- v_ename emp.ename%TYPE;
- v_job emp.job%TYPE;
- v_dname dept.dname%TYPE;
- v_loc dept.loc%TYPE;
- BEGIN
- IF p_table = 'emp' THEN
- v_empno := 7369;
- OPEN v_cursorvar FOR
- SELECT ename, job FROM emp WHERE empno = v_empno; --打开游标变量
- ELSE
- IF p_table = 'dept' THEN
- OPEN v_cursorvar FOR
- SELECT dname, loc FROM dept; --打开游标变量
- ELSE
- raise_application_error(-20000, '请输入emp或dept!');
- END IF;
- END IF;
- LOOP
- IF p_table = 'emp' THEN
- FETCH v_cursorvar
- INTO v_ename, v_job;
- EXIT WHEN v_cursorvar%NOTFOUND;
- dbms_output.put_line('ename=' || v_ename || ',job=' || v_job);
- ELSE
- FETCH v_cursorvar
- INTO v_dname, v_loc;
- EXIT WHEN v_cursorvar%NOTFOUND;
- dbms_output.put_line('dname=' || v_dname || ',loc=' || v_loc);
- END IF;
- END LOOP;
- CLOSE v_cursorvar; --关闭游标变量
- END;
约束与无约束的游标变量
无约束的游标变量包含特定的返回类型(type,rowtype,record等),查询的选择列表必须匹配游标的返回类型,否则会出现预
定义的ROWTYPE_MISMATCH异常。约束的游标变量没有Return子句。
相关推荐
讲有关java如何调用ORACLE存储过程以及游标使用,它只包含JAVA调用ORACLE存储过程游标使用(上),还有JAVA调用ORACLE存储过程游标使用(上),
Oracle存储过程游标详解,针对Oracle存储过程游标详细说明。
oracle的存储过程与游标的使用。不错的资源。oracle为10g
Oracle存储过程、游标、函数的详解
Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标Oracle_的存储过程及游标
用callabledStatement调用oracle存储过程实用例子(IN OUT 传参数包括游标类型)
存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle
oracle存储过程使用游标对多表操作例子
oracle 的函数、存储过程、游标、简单实例 oracle常用语句oracle 的函数、存储过程、游标、简单实例 oracle常用语句
本文实例讲述了Oracle存储过程游标用法。分享给大家供大家参考,具体如下: 使用游标的5个步骤 1、声明一些变量用于保存select语句返回的指 2、声明游标,并指定select 语句 3、打开游标 4、从游标中获取记录 5、...
存储过程调用 Function 并使用 游标循环得到每一条数据然后更新本条数据。初学代码写的不是很好,希望能给初学存储过程的兄弟们提供一点借鉴哦。
Oracle是一个生产中间件和数据库的较大的生产商,oracle原本的含义:“神谕”,指的是神说的话,中国在商朝时代,把一些刻在龟壳上的文字当成是上天的指示,所以在中国将oracle翻译成”甲骨文”.
本例是我工作中的一些实操例子,亦是我工作日志,记录在此,既可作为我自己的总结,也可以此分享给同行借鉴。...2.创建oracle存储过程脚本 3.JDBC调用存储过程语句 4.创建Groovy脚本 5.xml入参示例 6.json出参示例
NULL 博文链接:https://susteven.iteye.com/blog/1536079
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
内有三个文件 TESTPACKAGE.txt和CURSOR_TEST2.txt中为oracle建存储过程语句,OracleProcedure.java为java操作存储过程的程序
oracle存储过程使用游标判断2表差异,进行新增更新操作
NULL 博文链接:https://fruitking.iteye.com/blog/1447333
NULL 博文链接:https://xiaohewoai.iteye.com/blog/523079