`

JAVA调用ORACLE PACKAGE 的FUNCTION&PROCEDURE

    博客分类:
  • Java
 
阅读更多

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

    在Java编程中,有时我们需要调用Oracle数据库的存储过程,特别是当存储过程返回一个游标(Cursor)时,这种情况在处理大量数据或者分页查询时很常见。游标允许我们逐行处理结果集,而无需一次性加载所有数据,这对于...

    hibernate query调用oracle存储过程

    本篇文章将深入探讨如何使用Hibernate的Query接口来调用Oracle的存储过程和函数,以及提供相关的示例代码和数据库文件。 首先,让我们了解什么是存储过程和函数。存储过程是预编译的SQL语句集合,可以接受参数、...

    Oracle_function_package_procedure.rar_oracle_pl sql function_pl/

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和灵活性深受开发者喜爱。在Oracle数据库中,PL/SQL(Procedural Language/Structured Query Language)是一种结构化查询语言的扩展,它允许开发人员...

    大型项目Oracle sql,function,procedures,package,cursor,job

    标题和描述中提到的“大型项目Oracle sql,function,procedures,package,cursor,job”涉及的是Oracle数据库管理和开发的核心概念。以下是对这些概念的详细解释: 1. **SQL(Structured Query Language)**:SQL...

    oracle 包 procedure

    Oracle数据库中的“包”(Package)和“过程”(Procedure)是高级数据库编程的重要概念,它们在企业级应用开发中广泛使用。理解并熟练掌握这些概念对于任何Oracle数据库开发者来说都至关重要。 首先,我们来解释...

    oracle汉字转拼音package包-支持UTF8

    在Oracle中,这样的包通常是开发人员自定义编写的,包含了一系列的PL/SQL程序单元,如过程(PROCEDURE)和函数(FUNCTION)。它们通过调用特定的API或者内置功能来完成汉字转拼音的任务。例如,可能会使用Oracle的...

    Oracle数据库Package

    Oracle数据库中的Package是一种高级的模块化编程工具,它允许开发者将相关的过程、函数、变量和类型等编程元素组合在一起,形成一个逻辑上的整体。Package在Oracle数据库系统中扮演着重要的角色,提供了更好的代码...

    Oracle PlSql 存储过程

    Oracle 存储过程的基本语法包括 PROCEDURE、FUNCTION 和 PACKAGE 等。PROCEDURE 是最基本的存储过程单元,FUNCTION 是带返回值的存储过程,而 PACKAGE 是一组相关的存储过程的集合。 三、 Oracle 存储过程的基本...

    oracle 存储过程 函数 dblink

    在这段Java代码中,我们使用了`CallableStatement`来调用Oracle存储过程`TESTA`。关键点包括: - `prepareCall`方法用于准备调用存储过程。 - 使用`setString`方法设置输入参数的值。 - 调用`execute`方法执行存储...

    oracle触发器调用存储过程

    3. Package不能被声明为AT,只有package所拥有的function和procedure才能声明为AT。 4. AT程序必须以commit或rollback结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled ...

    为oracle增加系统调用接口

    ### 为Oracle增加系统调用接口 #### 概述 本文档主要介绍了一种早期方法,在Oracle 9i版本上实现调用动态库中的函数,从而扩展数据库的功能。随着技术的发展,这一特性在后续版本如Oracle 10g中已内建支持。本示例...

    oracle学习笔记

    本文将深入探讨Oracle中的几个关键概念,如Package、Function、Procedure以及它们在Oracle数据库中的使用。 首先,让我们了解一下Oracle Package的作用。Package的主要目标是简化应用设计,通过将相关的过程、函数...

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

    #### 四、用Java调用Oracle存储过程 **1. 无返回值的存储过程** - **调用示例**: ```java Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); ...

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

    在Java中调用Oracle存储过程可以通过JDBC API来完成。在调用时,可以根据存储过程是否有返回值来进行区分处理。无返回值的存储过程只需要执行execute命令,而有返回值的存储过程则需要使用CallableStatement对象,并...

    一个简单的oracle过程被使用的例子,包含架包

    Oracle过程是数据库管理系统中的一种重要组成部分,主要用于存储和执行复杂的业务...在提供的`callProcedurePro`示例中,我们看到了如何定义、调用和集成Oracle过程到一个包中,以便于在需要时方便地重复使用和调用。

    Oracle P/L SQL实现FTP上传、下载功能

    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学习第七章

    在Oracle中,子程序包括过程(Procedure)和函数(Function)。过程是一系列SQL或PL/SQL语句的集合,它们执行特定的任务,但不返回值。你可以将它们视为数据库中的自定义操作。而函数则类似于过程,也包含一系列的...

    oracle对象创建实例

    Oracle对象包括触发器(Trigger)、存储过程(Stored Procedure)以及其他多种数据库组件,它们对于实现业务逻辑、数据验证以及性能优化等方面起着至关重要的作用。这篇文档将深入探讨如何在Oracle环境中创建和管理...

    如何使用Oracle数据库实现实时通信

    不过,这个功能依赖于Oracle 8i或更高版本中的Java虚拟机(JVM)。在使用UTL_SMTP之前,需要确保JVM已安装,并且plsql.jar已经加载到数据库中。如果未自动加载,可以通过运行$ORACLE_HOME/RDBMS/ADMIN/initplsj.sql...

    怎么用oracle打包

    虽然题目提到的"打包jar.txt"文件可能与Java相关的JAR打包有关,但在Oracle数据库上下文中,"打包"通常指的是PL/SQL对象的组织。然而,在Oracle Application Express(APEX)或Oracle JDeveloper等开发工具中,确实...

Global site tag (gtag.js) - Google Analytics