`

从PL/SQL存储函数返回数组

阅读更多

完成此方法指南后,您应该能够:

  • 在 Oracle 数据库中创建 VARRAY

  • 使用 oracle.sql.ARRAY

  • 从 Java 访问 VARRAY

简介

本文档演示如何从 PL/SQL 函数返回数组并从 java 应用程序访问它。数组是一组有序的数据元素。 VARRAY 是大小可变的数组。它具有数据元素的排列集,并且所有元素属于同一数据类型。每个元素都具有索引,它是与元素在 VARRAY 中的位置相对应的一个数字。 VARRAY 中元素的数量是 VARRAY 的“大小”。在声明 VARRAY 类型时,必须指定其最大值。

在此方法指南中,PL/SQL 存储函数 SCOTT 模式的 EMP 表中取出所有雇员的姓名,以这些姓名创建一个数组并将其返回。从 Java 应用程序调用此 PL/SQL 存储函数,向用户显示雇员的姓名。

软件需求

  • Oracle9i Database version 9.0.1 或更新版本。您可从 Oracle 技术网下载 Oracle9i 数据库。

  • JDK1.2.x 或更高版本。可从此处下载。

  • Oracle9i JDBC 驱动程序。JDBC 驱动程序可从 ORACLE_HOME/jdbc/lib 处获得。也可从此处下载。

在数据库中创建一个 SQLVARRAY 类型,在本例中,它是 VARCHAR2 类型。 作为 scott/tiger 用户连接到数据库,并在 SQL 提示符处执行以下命令

SQL>CREATE OR REPLACE TYPE EMPARRAY is VARRAY(20) OF VARCHAR2(30)
SQL>/

然后创建下面的函数,它返回一个 VARRAY

CREATE OR REPLACE FUNCTION getEmpArray RETURN EMPARRAY
AS
  l_data EmpArray := EmpArray();
  CURSOR c_emp IS SELECT ename FROM EMP;
  BEGIN
    FOR emp_rec IN c_emp LOOP
      l_data.extend;
      l_data(l_data.count) := emp_rec.ename;
    END LOOP;
    RETURN l_data;
  END;

 

在数据库中创建函数后,可以从 java 应用程序调用它并在应用程序中获得数组数据。下面给出代码段,从 Java 应用程序执行 PL/SQL 存储函数。单击此处查看完整的应用程序源代码。

public static void main( ) {
.........
......... 
  OracleCallableStatement stmt =(OracleCallableStatement)conn.prepareCall
                ( "begin ?:= getEMpArray; end;" );

    // The name we use below, EMPARRAY, has to match the name of the 
    // type defined in the PL/SQL Stored Function
    stmt.registerOutParameter( 1, OracleTypes.ARRAY,"EMPARRAY" );
    stmt.executeUpdate();

    // Get the ARRAY object and print the meta data assosiated with it
    ARRAY simpleArray = stmt.getARRAY(1);

    System.out.println("Array is of type " +  simpleArray.getSQLTypeName());

    System.out.println("Array element is of type code "+simpleArray.getBaseType());

    System.out.println("Array is of length " + simpleArray.length());

    // Print the contents of the array
    String[] values = (String[])simpleArray.getArray();

    for( int i = 0; i < values.length; i++ )
      System.out.println( "row " + i + " = '" + values[i] +"'" );

...........
...........

 

在上面的代码段中,可以看到 OracleCallableSatatement 用于调用 PL/SQL 存储函数。在执行 PL/SQL 存储函数前,将返回的数据类型注册为 OracleTypes.ARRAY,并且指定在数据库中定义的类型名称 (EMPARRAY)。然后执行 PL/SQL 存储函数并获得 oracle.sql.ARRAY 形式的返回值。 oracle.sql.ARRAY 类拥有的方法可以获得关于数组的详细信息,如数组类型、数组长度等。使用 oracle.sql.ARRAYgetArray() 方法获得数组的内容并将内容打印出来。

总结

本文档说明了如何创建 VARRAY 并从 PL/SQL 存储函数返回数组,以及如何从 java 应用程序访问它

 

参考:http://www.oracle.com/technology/global/cn/sample_code/tech/java/codesnippet/jdbc/varray/index.html

分享到:
评论

相关推荐

    只能在PL/SQL中访问联合数组。

    在Oracle数据库的PL/SQL环境中,...总结来说,联合数组是PL/SQL中的一种灵活的数据结构,用于在程序中存储和操作动态数据集合,而`add_months`函数则是处理日期操作的重要工具,两者都是PL/SQL编程中不可或缺的功能。

    pl/sql最新中文手册

    1. **PL/SQL基础**:手册可能会从基础开始,介绍PL/SQL的基本结构,包括声明变量、常量、游标、记录类型等。还会讲解如何编写存储过程、函数和触发器。 2. **控制流程语句**:这包括条件判断(IF-THEN-ELSIF-ELSE)...

    PL/SQL存储过程编程

    ### PL/SQL存储过程编程详解 #### 一、Oracle应用编辑方法概览 在Oracle数据库的应用开发中,存在多种编辑方法和技术,它们各有特点和适用场景。以下是对这些方法的概述: 1. **Pro*C/C++**: 这是一种C语言与...

    整理:oracle pl/sql 入门+ 数组使用+游标+动态SQL

    - PL/SQL数组:在PL/SQL中,数组是一种可以存储同一类型数据的集合,提供了批量操作数据的能力。 - 定义数组:学习如何声明并初始化数组,以及指定数组的大小和元素类型。 - 数组操作:包括赋值、索引访问、遍历...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    8. **存储过程和函数**:在数据库服务器端执行的PL/SQL代码,可以提高性能,减少网络通信,并提供安全性的提升。 9. **索引和性能优化**:了解如何创建和使用索引,以及通过PL/SQL分析和优化SQL查询性能。 10. **...

    pl/sql 学习资料

    - 数组:声明和操作PL/SQL索引数组和关联数组。 - 表类型:使用PL/SQL表类型进行集合操作。 -记录类型:定义和使用记录类型,类似于结构或对象。 5. **程序单元**: - 包(PACKAGE):定义公共接口和私有实现,...

    oracle 中 pl/sql 只是学习方法

    4. **存储过程和函数**:存储过程是一组预先编译的PL/SQL语句,可以在需要时调用,减少网络通信,提高性能。函数与存储过程类似,但必须返回一个值。它们可以用于封装复杂的业务逻辑,增强代码复用性。 5. **异常...

    精通pl/sql

    1. **PL/SQL基础**:介绍PL/SQL的基本语法,包括变量声明、常量定义、条件判断语句(IF-THEN-ELSIF-ELSE)、循环结构(WHILE、FOR)、异常处理(BEGIN-EXCEPTION-END)等,以及如何编写存储过程、函数和触发器。...

    Oracle PL/SQL编程及最佳实践

    Oracle PL/SQL 是一种高级编程语言,用于开发 Oracle 数据库中的存储过程、函数和触发器。PL/SQL language 提供了强大的编程能力,可以实现复杂的业务逻辑,并且与 Oracle 数据库紧密集成。 一、Oracle 简介 ...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...

    pl/sql使用软件

    6. **存储过程与函数**:存储过程是预编译的PL/SQL代码块,可以接受参数,执行一系列操作,并返回结果。函数与存储过程类似,但必须返回一个值。 7. **包**:包是包含相关过程、函数和其他元素的逻辑单元,提供封装...

    oracle pl/sql fundamentals

    12. **数据库对象的DDL操作**:学习如何在PL/SQL中创建、修改和删除数据库对象,如表、视图、索引和存储过程。 13. **PL/SQL与SQL的集成**:了解如何在PL/SQL中嵌入SQL语句,以及SQL语句如何与PL/SQL逻辑相互配合。...

    最容易上手的PL/SQL学习教程-有经过测试的丰富案例

    在§2.2中,我们看到了PL/SQL块可以是匿名块(直接在SQL*PLUS中执行的一次性代码块)或命名块(如存储过程、函数、包等)。 标识符(§2.3)是PL/SQL中的重要组成部分,它们用于命名变量、常量、表、过程等。在§...

    ORALCE PL/SQL程序设计第五版

    《ORACLE PL/SQL程序设计第五版》是深入学习Oracle数据库编程的重要参考资料,它涵盖了PL/SQL语言的基础到高级概念,旨在帮助读者迅速提升在Oracle环境中编写高效、可靠的存储过程和函数的能力。这本书分为上、下两...

    Oracle PL/SQL by Example(4th Edition)

    2. **过程和函数**:了解如何定义和调用存储过程和函数,这些是PL/SQL中的核心组件,用于封装和重用代码。 3. **游标**:学习如何使用游标来遍历查询结果集,这是处理单行或逐行数据的常见方法。 4. **记录和表...

    pl/sql开发

    通过学习PL/SQL,开发者能够编写复杂的存储过程、函数、触发器等,以实现高效的数据处理和业务逻辑。 ### 1. PL/SQL语言基础 1.1 **什么是PL/SQL** PL/SQL,全称Procedural Language/Structured Query Language,...

    Introduction To ORACLE9i PL/SQL(所有讲解及习题)

    Oracle9i PL/SQL是Oracle数据库系统中的一种过程化编程语言,它结合了SQL的查询功能和传统的编程语言特性,使得数据库操作更为高效和灵活。本资料“Introduction To ORACLE9i PL/SQL”提供了全英文的学习资源,适合...

    PL-SQL(chinese).rar_pl_pl sql_pl/sql

    PL/SQL支持游标、嵌套表、关联数组等高级数据结构,这些在处理复杂查询和批量操作时非常有用。此外,PL/SQL还可以调用Oracle的内置函数和过程,以及用户自定义的数据库对象,实现与数据库的深度交互。 总之,PL/...

Global site tag (gtag.js) - Google Analytics