`
jayghost
  • 浏览: 441705 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle存储过程、游标使用

 
阅读更多

转: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,...)这一行

一个带有输入,输出参数的简单的例子

 

[java] view plaincopy
 
  1. CREATE OR REPLACE PROCEDURE proc_in_out_test(var_empno NUMBER,  
  2.                                              var_ename OUT VARCHAR2) IS  
  3. BEGIN  
  4.   SELECT ename INTO var_ename FROM emp WHERE empno = var_empno;  
  5. EXCEPTION  
  6.   WHEN no_data_found THEN  
  7.     raise_application_error(-20000'该员工不存在');  
  8. END;  

 

调用该过程

 

[c-sharp] view plaincopy
 
  1. SQL> var vempno number;  
  2. SQL> var vename varchar2(10);  
  3. SQL> exec :vempno:=7934;  
  4. SQL> exec proc_in_out_test(:vempno,:vename);  
  5. PL/SQL procedure successfully completed  
  6. vename  
  7. ---------  
  8. MILLER  
  9.   
  10. SQL> exec :vempno:=7935;  
  11. SQL> exec proc_in_out_test(:vempno,:vename);  
  12.   
  13. begin proc_in_out_test(:vempno,:vename); end;  
  14.   
  15. ORA-20000: 该员工不存在  
  16. ORA-06512: 在 "SCOTT.PROC_IN_OUT_TEST", line 7  
  17. ORA-06512: 在 line 1  

 

 

显示游标语法:

CURSOR cursor_name IS select_statement

一个简单的例子:

 

[java] view plaincopy
 
  1. DECLARE  
  2.   v_empname emp.ename%TYPE;  
  3.   v_job     emp.job%TYPE;  
  4.   v_deptno  emp.deptno%TYPE;  
  5.   CURSOR emp_test IS --声明游标  
  6.     SELECT ename, job FROM emp WHERE deptno = v_deptno;  
  7. BEGIN  
  8.   v_deptno := 10;  
  9.   OPEN emp_test; --打开游标  
  10.   --循环游标  
  11.   LOOP  
  12.     FETCH emp_test  
  13.       INTO v_empname, v_job; --取值  
  14.     EXIT WHEN emp_test%NOTFOUND; --当没有记录时退出循环  
  15.     dbms_output.put_line('empname=' || v_empname || ',job=' || v_job);  
  16.   END LOOP;  
  17.   CLOSE emp_test;  
  18. END;  
  19. --游标的属性有:%FOUND,%NOTFOUNRD,%ISOPEN,%ROWCOUNT;  
  20. --%FOUND:已检索到记录时,返回true  
  21. --%NOTFOUNRD:检索不到记录时,返回true  
  22. --%ISOPEN:游标已打开时返回true  
  23. --%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];

 

[java] view plaincopy
 
  1. CREATE OR REPLACE PROCEDURE cursorvariabletest(p_table IN VARCHAR2) IS  
  2.   TYPE t_emp_dept IS REF CURSOR; --定义游标变量类型  
  3.   v_cursorvar t_emp_dept; --声明游标变量  
  4.   
  5.   v_empno emp.empno%TYPE;  
  6.   v_ename emp.ename%TYPE;  
  7.   v_job   emp.job%TYPE;  
  8.   v_dname dept.dname%TYPE;  
  9.   v_loc   dept.loc%TYPE;  
  10.   
  11. BEGIN  
  12.   IF p_table = 'emp' THEN  
  13.     v_empno := 7369;  
  14.     OPEN v_cursorvar FOR  
  15.       SELECT ename, job FROM emp WHERE empno = v_empno; --打开游标变量  
  16.   ELSE  
  17.     IF p_table = 'dept' THEN  
  18.       OPEN v_cursorvar FOR  
  19.         SELECT dname, loc FROM dept; --打开游标变量  
  20.     ELSE  
  21.       raise_application_error(-20000'请输入emp或dept!');  
  22.     END IF;  
  23.   END IF;  
  24.   
  25.   LOOP  
  26.     IF p_table = 'emp' THEN  
  27.       FETCH v_cursorvar  
  28.         INTO v_ename, v_job;  
  29.       EXIT WHEN v_cursorvar%NOTFOUND;  
  30.       dbms_output.put_line('ename=' || v_ename || ',job=' || v_job);  
  31.     ELSE  
  32.       FETCH v_cursorvar  
  33.         INTO v_dname, v_loc;  
  34.       EXIT WHEN v_cursorvar%NOTFOUND;  
  35.       dbms_output.put_line('dname=' || v_dname || ',loc=' || v_loc);  
  36.     END IF;  
  37.   END LOOP;  
  38.   CLOSE v_cursorvar; --关闭游标变量  
  39. END;  

 

约束与无约束的游标变量
无约束的游标变量包含特定的返回类型(type,rowtype,record等),查询的选择列表必须匹配游标的返回类型,否则会出现预

定义的ROWTYPE_MISMATCH异常。约束的游标变量没有Return子句。

 

 

分享到:
评论

相关推荐

    Oracle存储过程游标详解

    "Oracle存储过程游标详解" Oracle 存储过程游标是指在 Oracle 数据库中使用游标来实现对结果集的处理和操作。游标可以分为静态游标和REF游标两种类型。静态游标是指结果集已经确实(静态定义)的游标,可以进一步...

    JAVA调用ORACLE存储过程游标使用

    Oracle存储过程可以封装复杂的业务逻辑,而游标则用于在结果集上进行迭代,特别是当结果集太大,不适合一次性加载到内存时。下面将详细介绍如何在Java中实现这一功能。 首先,确保你已经在Oracle数据库中创建了包含...

    oracle存储过程游标

    ### Oracle 存储过程与游标使用详解 在Oracle数据库管理中,存储过程与游标是两个非常重要的概念。它们可以提高数据处理的效率、增强应用程序的灵活性,并且能够简化复杂的数据库操作。本文将根据提供的内容,深入...

    Oracle存储过程、游标、函数的详解

    ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    本示例展示了如何使用 CallabledStatement 来调用 Oracle 存储过程,并实现 IN OUT 参数和游标类型参数的使用。这种方法可以提高应用程序的性能和安全性。同时,游标类型参数的使用可以实现数据的批量处理,提高应用...

    oracle存储过程使用游标对多表操作例子

    本文将深入探讨如何在Oracle存储过程中使用游标进行多表操作,具体通过一个示例来展示这一过程。 ### 标题与描述分析 标题:“oracle存储过程使用游标对多表操作例子”直接指出了文章的主题是关于在Oracle环境下,...

    存储过程 游标 oracle

    存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle 存储过程 游标 oracle

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    oracle 的函数、存储过程、游标、简单实例

    本主题将深入探讨Oracle中的几个核心概念:函数、存储过程、游标以及简单的实例,这些都是数据库管理员和开发人员日常工作中不可或缺的部分。 首先,我们来了解**Oracle函数**。函数是预定义的代码块,接受零个或多...

    Oracle教案 Oracle 存储过程 游标 SQL语句 PL/SQL

    Oracle 教案:深入理解 Oracle 存储过程、游标与 SQL 语句及 PL/SQL Oracle 是全球领先的数据库管理系统提供商,不仅提供数据库产品,还包括中间件、云计算服务等全面的企业级解决方案。"Oracle"一词源于古希腊神话...

    Oracle存储过程实例使用显示游标

    在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...

    ORACLE 游标 异常 存储过程

    在本篇讨论中,我们将深入理解Oracle游标、异常处理以及如何在存储过程中使用它们。 1. **Oracle游标**: - **定义**:Oracle游标是数据库系统提供的一种机制,用于在结果集中定位并处理单条记录。它实际上是一个...

    Oracle存储过程out游标

    在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...

    Oracle 存储过程JAVA调用存储过程 游标使用

    这篇博客可能详细讨论了如何在Java中与Oracle存储过程交互,特别是涉及到了游标的使用。 首先,让我们理解存储过程的概念。存储过程是一组预先编译的SQL语句,可以接受参数,执行复杂操作,然后返回结果。在Oracle...

    oracle存储过程返回游标数据集

    存储过程中通过返回数据集,通过游标方式实现,以及在java中如何接收的整个过程

    Oracle 数据库游标使用大全

    在Oracle中,游标对于实现复杂的数据操作和控制流程至关重要,特别是在存储过程和触发器中。 1. **游标简介** 游标提供了一种方式来遍历查询结果集,并允许应用程序一次处理一行。游标有显式和隐式两种类型。显式...

    Oracle存储过程游标用法分析

    Oracle存储过程中的游标是数据库操作中非常重要的一个概念,特别是在处理批量数据或者需要逐行处理查询结果时。游标允许我们动态地控制查询结果集,逐行读取和操作数据,而不需要一次性加载所有结果。以下是关于...

    ORACLE 游标使用示例

    在"游标.txt"文件中,可能包含了更多关于Oracle游标的使用实例和技巧,包括游标的声明、动态游标、游标变量、游标表达式以及游标在存储过程和函数中的应用。这些内容可以帮助你更深入地理解和掌握Oracle游标,提高你...

    groovy将JDBC中oracle存储过程游标转换为多层json

    ### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...

Global site tag (gtag.js) - Google Analytics