oracle的存储过程和函数区别
1、都可以使用out参数返回多个值,一般原则是有多个返回值使用过程;如果只有一个返回值,使用函数
2、过程调用本身就是一条pl/sql语句,而函数只能作为表达式的一部分进行调用
以获得user_objects表的object_name为例,由于只返回一个字段,所以使用oracle函数,第一种方式返回标量数据类型,第二种方式返回游标类型。标量只包含一个值,而游标可以代表一个查询结果集。
一、返回标量的函数
1、在oracle中定义函数
create function getObjectsName(obj_type varchar2)
return varchar2
is
o_name user_objects.OBJECT_NAME%type;
o_names long;
cursor objs_cursor(o_type varchar2)
is
select object_name from user_objects where object_type=o_type and rownum<11;
begin
open objs_cursor(obj_type); --打开游标
loop
fetch objs_cursor into o_name;
o_names:=o_names || '_' ||o_name;--使用一个变量合并所有值
exit when objs_cursor%NOTFOUND ;
end loop;
close objs_cursor;
return o_names;
end;
2、在java中调用
String function= "{?=call getObjectsName(?)}";//比调用存储过程多了一部分:“?=”
cstmt = conn.prepareCall(function);
//注册返回类型(或out类型)参数
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.VARCHAR);
//注册传入(in类型)参数
cstmt.setString(2, "TABLE");
cstmt.execute();
//从输出参数中获取值
String values = cstmt.getString(1);
System.out.println(values);
二、返回游标类型
首先定义返回类的类型,以便函数返回,有一些类型可以直接create定义,如嵌套表、varray,但是有一些类型不可以使用create,如索引表、游标,如果想返回不可create的类型,可以先创建package,再创建想返回的类型,如:
1、创建包规范
create or replace package yulee is
type objNames_cur is ref cursor;--创建想返回的类型,以便function返回
function getObjNames(objType varchar2)return objNames_cur ;
end yulee;
2、创建包体
create or replace package body yulee is
function getObjNames(objType varchar2) return objNames_cur is
objNames objNames_cur;
begin
OPEN objNames FOR
select object_name from user_objects
where object_type=objType and rownum<11;
return objNames;
close objNames;--不可以在return前关闭,否则java获得无效的游标
end getObjNames;
end yulee;
3、java程序调用
String procedure = "{?=call yulee.getObjNames(?)}";
cstmt = conn.prepareCall(procedure);
//注册返回参数
cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
//传入参数
cstmt.setString(2, "TABLE");
cstmt.execute();
//打印返回值
rs = (ResultSet)cstmt.getObject(1);
while(rs.next()){
System.out.println(rs.getString("object_name"));
}
分享到:
相关推荐
3. **Java调用Oracle函数**: 在Java中,你需要使用Oracle的JDBC驱动(ojdbc.jar和nls_charset12.jar)来与Oracle数据库交互。首先,你需要加载Oracle驱动并建立数据库连接。然后,你可以通过`CallableStatement`来...
调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....
### Java调用Oracle的过程和函数 在现代软件开发过程中,Java与Oracle数据库的结合非常常见。为了更好地管理和处理数据,通常需要在Java程序中调用Oracle数据库中的存储过程或函数。本文将详细介绍如何通过Java来...
Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...
4. **定义Hibernate Native SQL查询**:由于Hibernate默认不支持调用存储过程或函数,我们需要使用`@NamedNativeQuery`或`@SqlResultSetMapping`注解来定义一个原生SQL查询,用于调用Oracle函数。例如: ```java @...
### Java中调用Oracle的存储过程和函数 在Java应用程序中调用Oracle数据库中的存储过程或函数是一项常见的任务。这不仅能够提高代码的执行效率,还可以有效地管理事务处理,确保数据的一致性和完整性。本文将详细...
11. **Java调用存储过程和存储函数**:Java开发者可以使用JDBC(Java Database Connectivity)API来调用Oracle的存储过程和函数,实现数据库操作。CallableStatement接口用于这个目的,允许传递参数并接收返回值。 ...
以上是Java调用Oracle数据库过程和函数的基本步骤和关键知识点。实际应用中,可能还需要考虑事务管理、性能优化(如批处理)、连接池等高级主题。理解这些概念和操作对于开发高效、可靠的Java数据库应用至关重要。
本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...
Java调用过程的几个步骤: 1.创建连接对象 2.得到CallableStatement对象, CallableStatement cst=conn.prepareCall("{call 过程名(?,?... )}"); //每个?代表过程中的一个参数 3.给输入参数赋值 4.注册输出参数,比如...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了...
### Java调用Oracle存储过程详解 #### 一、概述 在企业级应用开发中,数据库存储过程被广泛用于实现复杂的业务逻辑处理。由于其高效性和安全性,存储过程常常成为首选方案之一。Java作为主流的企业级开发语言之一...
Java调用Oracle分页存储过程是一项常见的数据库操作,尤其在处理大数据量时,为了提高查询效率和用户体验,分页查询显得尤为重要。Oracle数据库提供了一种高效的方法,即通过创建存储过程来实现分页功能,而Java作为...
对于Oracle函数,由于它会返回一个值,所以在Java中调用时,需要使用`registerOutParameter()`方法先声明返回值的数据类型,然后通过`CallableStatement`的`getXXX()`方法获取返回值。例如,如果函数返回一个整数,...
### Java调用Oracle与SQL Server存储过程的通用方法 #### 1. **建立数据库连接** 在Java中,使用JDBC(Java Database Connectivity)来连接数据库。根据`dbType`参数动态选择正确的数据源,即Oracle或SQL Server的...
总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...
在Ibatis中调用Oracle函数和存储过程,你需要以下步骤: 1. **配置映射文件(Mapper XML)**: - 创建一个XML映射文件,定义SQL语句。对于函数,使用`<select>`标签;对于存储过程,使用`<procedure>`标签。 - 在...
Oracle触发器调用Java程序 Oracle触发器是Oracle数据库中的一种机制,可以在数据库中执行特定的操作。在本文中,我们将介绍如何使用Oracle触发器调用Java程序。 一、加载Java程序 首先,我们需要将Java程序加载到...
本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...