转: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子句。
相关推荐
"Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...
Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细介绍如何在Java中实现这一功能。 首先,确保你已经在Oracle数据库中创建了包含...
### Oracle 存储过程与游标使用详解 在Oracle数据库管理中,存储过程与游标是两个非常重要的概念。它们可以提高数据处理的效率、增强应用程序的灵活性,并且能够简化复杂的数据库操作。本文将根据提供的内容,深入...
### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...
本示例展示了如何使用 CallabledStatement 来调用 Oracle 存储过程,并实现 IN OUT 参数和游标类型参数的使用。这种方法可以提高应用程序的性能和安全性。同时,游标类型参数的使用可以实现数据的批量处理,提高应用...
本文将深入探讨如何在Oracle存储过程中使用游标进行多表操作,具体通过一个示例来展示这一过程。 ### 标题与描述分析 标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,...
存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle
本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...
Oracle 教案:深入理解 Oracle 存储过程、游标与 SQL 语句及 PL/SQL Oracle 是全球领先的数据库管理系统提供商,不仅提供数据库产品,还包括中间件、云计算服务等全面的企业级解决方案。"Oracle"一词源于古希腊神话...
在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...
在本篇讨论中,我们将深入理解Oracle游标、异常处理以及如何在存储过程中使用它们。 1. **Oracle游标**: - **定义**:Oracle游标是数据库系统提供的一种机制,用于在结果集中定位并处理单条记录。它实际上是一个...
在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
这篇博客可能详细讨论了如何在Java中与Oracle存储过程交互,特别是涉及到了游标的使用。 首先,让我们理解存储过程的概念。存储过程是一组预先编译的SQL语句,可以接受参数,执行复杂操作,然后返回结果。在Oracle...
存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程
在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中。 1. **游标简介** 游标提供了一种方式来遍历查询结果集,并允许应用程序一次处理一行。游标有显式和隐式两种类型。显式...
Oracle存储过程中的游标是数据库操作中非常重要的一个概念,特别是在处理批量数据或者需要逐行处理查询结果时。游标允许我们动态地控制查询结果集,逐行读取和操作数据,而不需要一次性加载所有结果。以下是关于...
在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...
### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...