`
keepwork
  • 浏览: 334428 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Oracle--jdbc调用存储过程_函数_游标

 
阅读更多
1.首先建立名为pro_query_dept的存储过程

CREATE OR REPLACE PROCEDURE pro_query_dept (  
   p_deptno   IN       dept.deptno%TYPE,  
   p_dname    OUT      dept.dname%TYPE  
)  
--声明区  
AS  
--执行区  
BEGIN  
   SELECT dname  
     INTO p_dname  
     FROM dept  
    WHERE deptno = p_deptno;  
  
   IF p_dname = 'SALES'  
   THEN  
      p_dname := '销售部门';  
   ELSE  
      p_dname := '未知部门';  
   END IF;  
  
   DBMS_OUTPUT.put_line (p_dname);  
--异常处理  
EXCEPTION  
   WHEN OTHERS  
   THEN  
      DBMS_OUTPUT.put_line (SQLCODE || SQLERRM);  
END;  

 测试存储过程:
Sql代码--测试  
  
DECLARE  
   v_dname   dept.dname%TYPE;  
BEGIN  
   pro_query_dept (30, v_dname);  
END;  


 

java类源代码:

package com.sun.myjdbc;  
  
import java.sql.CallableStatement;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.Types;  
  
public class TestC {  
      
    public static void test1(){  
        try {  
            // 加载驱动  
            Class.forName("oracle.jdbc.driver.OracleDriver");  
            String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";  
            String user = "scott";  
            String password = "tiger";  
            Connection conn = DriverManager.getConnection(url, user, password);  
            String sql = "{call pro_query_dept(?,?)}";  
            // 创建一个过程的分析容器  
            CallableStatement cst = conn.prepareCall(sql);  
            // 设置输入参数  
            cst.setInt(1, 30);  
            // 定义输出类型  
            cst.registerOutParameter(2, Types.VARCHAR);  
            // 执行存储过程  
            cst.execute();  
            // 提取存储过程输出  
            String value = cst.getString(2);  
            System.out.println(value);  
            cst.close();  
            conn.close();  
              
        } catch (Exception e) {  
            e.printStackTrace();  
        }   
    }  
      
    public static void main(String[] args) {  
        test1();  
    }  
  
}  


 

 

2.调用函数

建立名为func_query_dept的函数

CREATE OR REPLACE FUNCTION func_query_dept (  
   p_dname    OUT      dept.dname%TYPE,  
   p_deptno   IN       dept.deptno%TYPE  
)  
   RETURN VARCHAR2  
--声明区  
AS  
--执行区  
BEGIN  
   SELECT dname  
     INTO p_dname  
     FROM dept  
    WHERE deptno = p_deptno;  
  
   IF p_dname = 'SALES'  
   THEN  
      p_dname := '销售部门';  
   ELSE  
      p_dname := '未知部门';  
   END IF;  
  
   RETURN 'OK';  
--异常处理  
EXCEPTION  
   WHEN OTHERS  
   THEN  
      DBMS_OUTPUT.put_line (SQLCODE || SQLERRM);  
      RETURN 'ERROR';  
END;  


 

测试代码:

DECLARE  
   v_dname   dept.dname%TYPE;  
   v_result  varchar2(20);  
BEGIN  
   v_result := func_query_dept (v_dname, 30);  
   dbms_output.put_line(v_result);  
END;  


 java类调用函数

public void test2(){  
    try{  
        Class.forName("oracle.jdbc.driver.OracleDriver");  
        String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";  
        String user = "scott";  
        String password = "tiger";  
              
        Connection con = DriverManager.getConnection(url, user, password);  
        String sql = "{?= call FUNC_QUERY_DEPT(?,?)}";  
        CallableStatement cst = con.prepareCall(sql);  
        cst.registerOutParameter(1,Types.VARCHAR);  
        cst.registerOutParameter(2,Types.VARCHAR);  
        cst.setInt(3, 30);  
              
        cst.execute();  
              
        System.out.println(cst.getString(1));  
        System.out.println(cst.getString(2));  
          
        con.close();  
    }catch(Exception e){  
        e.printStackTrace();  
    }  
}  


 

3.测试游标

首先建立一个包:

CREATE OR REPLACE PACKAGE pack_dept  
IS  
   TYPE cur IS REF CURSOR;  
END;  


 

然后有两种方式返回一个游标

方式一:

CREATE OR REPLACE PROCEDURE pro_find_dept (my_cur OUT pack_dept.cur)  
IS  
BEGIN  
   OPEN my_cur FOR SELECT * FROM dept;  
END;  


 

方式二:

CREATE OR REPLACE PROCEDURE pro_find_dept (my_cur OUT sys_refcursor)  
IS  
BEGIN  
   OPEN my_cur FOR SELECT * FROM dept;  
END;  

 

最后我们的java调用类

public void test3(){  
    try{  
        Class.forName("oracle.jdbc.driver.OracleDriver");  
        String url = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";  
        String user = "scott";  
        String password = "tiger";  
        Connection con = DriverManager.getConnection(url, user, password);  
        String sql = "{call pro_find_dept(?)}";  
        CallableStatement cst = con.prepareCall(sql);  
        cst.registerOutParameter(1, OracleTypes.CURSOR);  
        cst.execute();  
          
        //如何拿到输出的值  
          
        ResultSet rs = (ResultSet)cst.getObject(1);  
        while(rs.next()){  
            System.out.println(rs.getString(2));  
        }  
          
        rs.close();  
        cst.close();  
        con.close();  
    }catch(Exception e){  
        e.printStackTrace();  
    }  
      
      
}

 开发者博客www.developsearch.com

分享到:
评论

相关推荐

    java调用oracle存储过程或者函数

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    Orcale存储过程,游标,函数,简单易懂

    通过以上介绍可以看出,在 Oracle 数据库中,存储过程、游标和函数都是非常重要的概念和技术,它们为开发者提供了强大的工具来管理和操作数据库中的数据。掌握这些技术不仅可以提高开发效率,还能有效提升应用程序的...

    Oracle存储过程out游标

    总结一下,Oracle存储过程的Out游标是PL/SQL中返回多行结果的有效方式,Java通过JDBC API可以方便地调用这些存储过程并处理返回的结果集。在实际开发中,这种技术常用于处理复杂的数据查询和更新操作,特别是在需要...

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

    JDBC调用存储过程语句 通过Java JDBC连接到Oracle数据库,并调用上面创建的存储过程。这一步骤通常涉及到设置数据库连接、创建PreparedStatement对象以及执行存储过程。 ```java Connection conn = DriverManager...

    利用游标返回结果集的的例子(Oracle 存储过程).doc

    在Java编程中,我们可以使用JDBC(Java Database Connectivity)来调用这些Oracle存储过程。在提供的Java代码示例中,我们首先加载Oracle的JDBC驱动,然后建立到数据库的连接。这里使用了`CallableStatement`来执行...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    3. Java调用Oracle存储过程:Java程序可以通过JDBC来调用Oracle存储过程,获取结果集。 4. Type类型:Type类型是Oracle中的一种数据类型,用于定义复杂数据结构。 5. PACKAGE和PROCEDURE:PACKAGE和PROCEDURE是...

    如何调用oracle的函数、存储过程

    如果你需要在像Delphi这样的应用程序中调用Oracle的函数和存储过程,可以使用Oracle的客户端库(如oci.dll)或者ODBC/JDBC驱动。例如,在Delphi中,你可以使用Oracle的DBExpress组件(如TOracleQuery、...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...

    java调用Oracle存储过程

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了...

    oracle jdbc连接jar

    它包含了对JDBC 3.0规范的支持,并提供了对PL/SQL过程、函数和游标的调用能力。 2. **classes12.jar**:这是一个较旧的驱动,主要用于支持Oracle数据库9i及更低版本。它包含了Oracle的JDBC Type 2驱动,Type 2驱动...

    ORACLE-API-必看集

    Oracle API,全称为Oracle Application Programming Interface,是Oracle数据库系统提供的一系列函数和过程,供开发者在应用程序中调用,以实现对数据库的各种操作。Oracle API包括了多种接口,如PL/SQL包、JDBC...

    java调用存储过程实例

    根据提供的文件信息,我们可以深入解析如何在Java中通过JDBC(Java Database Connectivity)调用Oracle数据库的存储过程。 ### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL...

    oracle-mianshiti.rar_java 面试题_oracle_如何面试oracle

    - **过程**和**函数**的创建与调用,理解块结构(BEGIN...END)和异常处理(EXCEPTION)。 - **游标**(Cursor)的使用,用于迭代查询结果。 - **触发器**(Trigger):在特定事件(如INSERT、UPDATE或DELETE)...

    oracle存储过程学习经典[语法+实例+调用]

    - 包允许将多个存储过程、函数、变量和游标组合在一起,提高代码的组织性和可维护性。 - 创建包的语法: ```sql CREATE PACKAGE schema.package_name AS -- declarations END package_name; CREATE PACKAGE ...

    oracle-PROC编程学习笔记

    此外,你还会学习到如何使用Oracle的API(如OCILIB、ODBC或JDBC)与数据库交互,以及如何使用PROC生成的动态链接库在其他应用程序中调用这些函数。 总的来说,"oracle-PROC编程学习笔记"将带你深入探索Oracle数据库...

    Oracle存储过程学习经典[语法+实例+调用].

    - **实现方式**: 通过Oracle的Java存储过程支持,可以在存储过程中直接调用Java方法。 - **应用场景**: 实现复杂的数据处理逻辑,例如文件操作、外部系统集成等。 #### 七、Oracle高效分页存储过程实例 - **...

    oracle常用命令-一完整的电子商务网案例

    - 调用存储过程/函数时使用OracleParameter对象传递参数。 以上是关于Oracle数据库管理和操作的一些常见命令和技巧的详细介绍。这些知识点对于开发和维护一个完整的电子商务网站非常重要。通过对这些命令的学习和...

    oracle存储过程教程

    除了基本的存储过程,Oracle还提供了存储函数、游标、异常处理、事务控制等高级特性。存储函数与存储过程类似,但直接返回一个值,无需输出参数。游标则允许在PL/SQL中逐行处理查询结果。异常处理使得程序能够优雅地...

    JDBC_oracle.zip

    - Oracle的存储过程支持,可以调用数据库中的自定义函数和过程。 - 数据库链接(DB Links),允许在不同的Oracle数据库之间进行查询和操作。 总的来说,JDBC_oracle.zip可能包含了一个示例,展示了如何使用JDBC与...

Global site tag (gtag.js) - Google Analytics