CREATE OR REPLACE PACKAGE SCOTT.pkg_test as
/* 定义ref cursor类型
不加return类型,为弱类型,允许动态sql查询,
否则为强类型,无法使用动态sql查询;
*/
type myrctype is ref cursor;
--函数申明
function get(intID number) return myrctype;
Procedure getstudent(
intID number,
return_list out myrctype
);
end pkg_test;
CREATE OR REPLACE PACKAGE BODY SCOTT.pkg_test as
--函数体
function get(intID number) return myrctype is
rc myrctype; --定义ref cursor变量
sqlstr varchar2(500);
begin
if intID=0 then
--静态测试,直接用select语句直接返回结果
open rc for select id,name,sex,address,postcode,birthday from student;
else
--动态sql赋值,用:w_id来申明该变量从外部获得
sqlstr :='select id,name,sex,address,postcode,birthday from student where id=:w_id';
--动态测试,用sqlstr字符串返回结果,用using关键词传递参数
open rc for sqlstr using intid;
end if;
return rc;
end get;
Procedure getstudent(
intID number,
return_list out myrctype
)as
begin
open return_list
for
select id,name,sex,address,postcode,birthday from student;
end getstudent;
end pkg_test;
/
try {
conn.setAutoCommit(false);
CallableStatement proc = conn
.prepareCall("{call pkg_test.getstudent(?,?)}");
proc.setInt(1, 1);
proc.registerOutParameter(2, OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet) proc.getObject(2);
while (rs.next()) {
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
try {
conn.setAutoCommit(false);
CallableStatement proc = conn
.prepareCall("{call ? := pkg_test.get(?)}");
proc.setInt(2, 0);
proc.registerOutParameter(1, OracleTypes.CURSOR);
proc.execute();
ResultSet rs = (ResultSet) proc.getObject(1);
while (rs.next()) {
System.out.println(rs.getString(2));
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
分享到:
相关推荐
在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...
本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...
Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性深受开发者喜爱。在Oracle数据库中,PL/SQL(Procedural Language/Structured Query Language)是一种结构化查询语言的扩展,它允许开发人员...
标题和描述中提到的“大型项目Oracle sql,function,procedures,package,cursor,job”涉及的是Oracle数据库管理和开发的核心概念。以下是对这些概念的详细解释: 1. **SQL(Structured Query Language)**:SQL...
Oracle数据库中的“包”(Package)和“过程”(Procedure)是高级数据库编程的重要概念,它们在企业级应用开发中广泛使用。理解并熟练掌握这些概念对于任何Oracle数据库开发者来说都至关重要。 首先,我们来解释...
在Oracle中,这样的包通常是开发人员自定义编写的,包含了一系列的PL/SQL程序单元,如过程(PROCEDURE)和函数(FUNCTION)。它们通过调用特定的API或者内置功能来完成汉字转拼音的任务。例如,可能会使用Oracle的...
Oracle数据库中的Package是一种高级的模块化编程工具,它允许开发者将相关的过程、函数、变量和类型等编程元素组合在一起,形成一个逻辑上的整体。Package在Oracle数据库系统中扮演着重要的角色,提供了更好的代码...
Oracle 存储过程的基本语法包括 PROCEDURE、FUNCTION 和 PACKAGE 等。PROCEDURE 是最基本的存储过程单元,FUNCTION 是带返回值的存储过程,而 PACKAGE 是一组相关的存储过程的集合。 三、 Oracle 存储过程的基本...
在这段Java代码中,我们使用了`CallableStatement`来调用Oracle存储过程`TESTA`。关键点包括: - `prepareCall`方法用于准备调用存储过程。 - 使用`setString`方法设置输入参数的值。 - 调用`execute`方法执行存储...
3. Package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。 4. AT程序必须以commit或rollback结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled ...
### 为Oracle增加系统调用接口 #### 概述 本文档主要介绍了一种早期方法,在Oracle 9i版本上实现调用动态库中的函数,从而扩展数据库的功能。随着技术的发展,这一特性在后续版本如Oracle 10g中已内建支持。本示例...
本文将深入探讨Oracle中的几个关键概念,如Package、Function、Procedure以及它们在Oracle数据库中的使用。 首先,让我们了解一下Oracle Package的作用。Package的主要目标是简化应用设计,通过将相关的过程、函数...
#### 四、用Java调用Oracle存储过程 **1. 无返回值的存储过程** - **调用示例**: ```java Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); ...
在Java中调用Oracle存储过程可以通过JDBC API来完成。在调用时,可以根据存储过程是否有返回值来进行区分处理。无返回值的存储过程只需要执行execute命令,而有返回值的存储过程则需要使用CallableStatement对象,并...
Oracle过程是数据库管理系统中的一种重要组成部分,主要用于存储和执行复杂的业务...在提供的`callProcedurePro`示例中,我们看到了如何定义、调用和集成Oracle过程到一个包中,以便于在需要时方便地重复使用和调用。
Create or Replace Package UTL_FTP AUTHID CURRENT_USER as Type Connection is Record( Connection UTL_TCP.Connection, AccountInfo VarChar2(1000), TransferMethod Char(1), --A: ASCII...
在Oracle中,子程序包括过程(Procedure)和函数(Function)。过程是一系列SQL或PL/SQL语句的集合,它们执行特定的任务,但不返回值。你可以将它们视为数据库中的自定义操作。而函数则类似于过程,也包含一系列的...
Oracle对象包括触发器(Trigger)、存储过程(Stored Procedure)以及其他多种数据库组件,它们对于实现业务逻辑、数据验证以及性能优化等方面起着至关重要的作用。这篇文档将深入探讨如何在Oracle环境中创建和管理...
不过,这个功能依赖于Oracle 8i或更高版本中的Java虚拟机(JVM)。在使用UTL_SMTP之前,需要确保JVM已安装,并且plsql.jar已经加载到数据库中。如果未自动加载,可以通过运行$ORACLE_HOME/RDBMS/ADMIN/initplsj.sql...
虽然题目提到的"打包jar.txt"文件可能与Java相关的JAR打包有关,但在Oracle数据库上下文中,"打包"通常指的是PL/SQL对象的组织。然而,在Oracle Application Express(APEX)或Oracle JDeveloper等开发工具中,确实...