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数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...
通过以上介绍可以看出,在 Oracle 数据库中,存储过程、游标和函数都是非常重要的概念和技术,它们为开发者提供了强大的工具来管理和操作数据库中的数据。掌握这些技术不仅可以提高开发效率,还能有效提升应用程序的...
总结一下,Oracle存储过程的Out游标是PL/SQL中返回多行结果的有效方式,Java通过JDBC API可以方便地调用这些存储过程并处理返回的结果集。在实际开发中,这种技术常用于处理复杂的数据查询和更新操作,特别是在需要...
JDBC调用存储过程语句 通过Java JDBC连接到Oracle数据库,并调用上面创建的存储过程。这一步骤通常涉及到设置数据库连接、创建PreparedStatement对象以及执行存储过程。 ```java Connection conn = DriverManager...
在Java编程中,我们可以使用JDBC(Java Database Connectivity)来调用这些Oracle存储过程。在提供的Java代码示例中,我们首先加载Oracle的JDBC驱动,然后建立到数据库的连接。这里使用了`CallableStatement`来执行...
3. Java调用Oracle存储过程:Java程序可以通过JDBC来调用Oracle存储过程,获取结果集。 4. Type类型:Type类型是Oracle中的一种数据类型,用于定义复杂数据结构。 5. PACKAGE和PROCEDURE:PACKAGE和PROCEDURE是...
如果你需要在像Delphi这样的应用程序中调用Oracle的函数和存储过程,可以使用Oracle的客户端库(如oci.dll)或者ODBC/JDBC驱动。例如,在Delphi中,你可以使用Oracle的DBExpress组件(如TOracleQuery、...
Oracle JDBC分页实现是数据库操作中的一个重要环节,尤其是在处理大量数据时,为了提高用户体验和系统性能,分页查询显得尤为重要。Oracle数据库提供了多种方法来实现分页查询,其中包括使用ROWNUM伪列、游标...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了...
它包含了对JDBC 3.0规范的支持,并提供了对PL/SQL过程、函数和游标的调用能力。 2. **classes12.jar**:这是一个较旧的驱动,主要用于支持Oracle数据库9i及更低版本。它包含了Oracle的JDBC Type 2驱动,Type 2驱动...
Oracle API,全称为Oracle Application Programming Interface,是Oracle数据库系统提供的一系列函数和过程,供开发者在应用程序中调用,以实现对数据库的各种操作。Oracle API包括了多种接口,如PL/SQL包、JDBC...
根据提供的文件信息,我们可以深入解析如何在Java中通过JDBC(Java Database Connectivity)调用Oracle数据库的存储过程。 ### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL...
- **过程**和**函数**的创建与调用,理解块结构(BEGIN...END)和异常处理(EXCEPTION)。 - **游标**(Cursor)的使用,用于迭代查询结果。 - **触发器**(Trigger):在特定事件(如INSERT、UPDATE或DELETE)...
- 包允许将多个存储过程、函数、变量和游标组合在一起,提高代码的组织性和可维护性。 - 创建包的语法: ```sql CREATE PACKAGE schema.package_name AS -- declarations END package_name; CREATE PACKAGE ...
此外,你还会学习到如何使用Oracle的API(如OCILIB、ODBC或JDBC)与数据库交互,以及如何使用PROC生成的动态链接库在其他应用程序中调用这些函数。 总的来说,"oracle-PROC编程学习笔记"将带你深入探索Oracle数据库...
- **实现方式**: 通过Oracle的Java存储过程支持,可以在存储过程中直接调用Java方法。 - **应用场景**: 实现复杂的数据处理逻辑,例如文件操作、外部系统集成等。 #### 七、Oracle高效分页存储过程实例 - **...
- 调用存储过程/函数时使用OracleParameter对象传递参数。 以上是关于Oracle数据库管理和操作的一些常见命令和技巧的详细介绍。这些知识点对于开发和维护一个完整的电子商务网站非常重要。通过对这些命令的学习和...
除了基本的存储过程,Oracle还提供了存储函数、游标、异常处理、事务控制等高级特性。存储函数与存储过程类似,但直接返回一个值,无需输出参数。游标则允许在PL/SQL中逐行处理查询结果。异常处理使得程序能够优雅地...
- Oracle的存储过程支持,可以调用数据库中的自定义函数和过程。 - 数据库链接(DB Links),允许在不同的Oracle数据库之间进行查询和操作。 总的来说,JDBC_oracle.zip可能包含了一个示例,展示了如何使用JDBC与...