`

Oracle存储过程(或函数)返回游标、动态数组与java调用

阅读更多
1:如何从 PL/SQL 存储函数返回数组


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


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



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


CREATE OR REPLACE FUNCTION getEmpArray RETURN EMPARRAYAS  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 应用程序调用它并在应用程序中获得数组数据。


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("the type of the array is " +  simpleArray.getSQLTypeName());    
System.out.println("the type code of the element in the array is "+simpleArray.getBaseType());    
System.out.println("the length of the array is " + 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.ARRAY 的 getArray() 方法获得数组的内容并将内容打印出来。

2.函数怎样返回游标,以及如何调用




package Demo;

import java.io.*;

//Importing the Oracle Jdbc driver package makes the code more readable
import oracle.jdbc.*;
import java.sql.*;
class OracleRef
{
public static void main (String args [])
    throws SQLException
{
 // Load the driver
 DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

 String url = "jdbc:oracle:thin:@localhost:1521:yangyang";
 try {
   String url1 = System.getProperty("JDBC_URL");
   if (url1 != null)
     url = url1;
 } catch (Exception e) {
   // If there is any security exception, ignore it
   // and use the default
 }

 // Connect to the database
 Connection conn =
   DriverManager.getConnection (url, "scott", "tiger");

 // Create the stored procedure
 init (conn);

 // Prepare a PL/SQL call
 CallableStatement call =
   conn.prepareCall ("{ ? = call java_refcursor.job_listing (?)}");

 // Find out all the SALES person
 call.registerOutParameter (1, OracleTypes.CURSOR);
 call.setString (2, "SALESMAN");
 call.execute ();
 ResultSet rset = (ResultSet)call.getObject (1);

 // Dump the cursor
 while (rset.next ())
   System.out.println (rset.getString ("ENAME"));

 // Close all the resources
 rset.close();
 call.close();
 conn.close();

}

// Utility function to create the stored procedure
static void init (Connection conn)
    throws SQLException
{
 Statement stmt = conn.createStatement ();

 stmt.execute ("create or replace package java_refcursor as " +
		  "  type myrctype is ref cursor return EMP%ROWTYPE; " +
		  "  function job_listing (j varchar2) return myrctype; " +
		  "end java_refcursor;");

 stmt.execute ("create or replace package body java_refcursor as " +
		  "  function job_listing (j varchar2) return myrctype is " +
		  "    rc myrctype; " +
		  "  begin " +
		  "    open rc for select * from emp where job = j; " +
		  "    return rc; " +
		  "  end; " +
		  "end java_refcursor;");
 stmt.close();
}
}
 





1
0
分享到:
评论

相关推荐

    java调用oracle存储过程或者函数

    调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....

    Oracle存储过程、游标、函数的详解

    ### Oracle存储过程、游标、函数的详解 #### 一、概述 在Oracle数据库中,存储过程、游标和函数是非常重要的组成部分,它们为数据库管理提供了强大的编程能力。通过学习这些概念,我们可以更加灵活地管理和操作...

    oracle10g 函数返回游标类型

    在Oracle 10g数据库系统中,开发人员可以利用PL/SQL语言来创建复杂的存储过程、函数以及包,以执行数据库操作。其中,一个重要的功能是能够创建返回游标类型的函数,这种函数允许用户从数据库中检索并返回一组记录,...

    Oracle存储过程实例使用显示游标

    在本例中,“Oracle存储过程实例使用显示游标”着重展示了如何在存储过程中调用函数,并通过游标来处理和更新数据。 首先,我们需要了解存储过程的基本结构。一个存储过程通常包含以下部分: 1. **声明部分**:在...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    本文介绍了Java调用Oracle存储过程返回结果集Record和Cursor的相关知识点,包括创建Type、PACKAGE和PROCEDURE,Java代码中调用存储过程,并获取结果集。这些知识点对深入了解Oracle存储过程和Java调用Oracle存储过程...

    Oracle存储过程out游标

    在这个场景中,我们有三个文件:TESTPACKAGE.txt,CURSOR_TEST2.txt和OracleProcedure.java,分别涉及Oracle存储过程的创建、游标的使用以及Java代码如何与Oracle存储过程交互。 首先,`TESTPACKAGE.txt`很可能包含...

    ORACLE存储过程,函数,包,游标

    Oracle数据库是世界上最流行的数据库管理系统之一,它提供了丰富的编程接口,其中存储过程、函数、包和游标是数据库开发中常用的重要元素。以下是对这些概念的详细解释和它们在实际应用中的作用。 ### 存储过程 ...

    利用游标返回结果集的的例子(Oracle 存储过程).doc

    4. 使用Java的JDBC API调用这些存储过程,处理返回的游标结果。 这种技术在需要在应用程序中分批处理大量数据或者需要动态构建查询结果时非常有用。通过游标,我们可以灵活地控制对数据库的访问,同时避免一次性...

    oracle函数触发器游标等几个小例子

    在`oracle函数.txt`中,你可能会找到关于如何声明、定义和调用函数的详细说明。 2. **Oracle游标**:游标允许我们处理查询结果集中的每一行数据。在`oracle游标.txt`中,你可以学习到如何声明、打开、读取和关闭...

    oracle笔记(存储过程函数触发器游标流程控制等)

    这份"oracle笔记(存储过程函数触发器游标流程控制等)"涵盖了Oracle数据库管理中的关键知识点,包括但不限于以下几个方面: 1. **存储过程与函数**:存储过程是预编译的SQL语句集合,用于执行特定任务。它们可以提高...

    Oracle函数返回游标的方法及应用.pdf

    通过编写一个Oracle函数,可以在函数内部执行复杂的查询逻辑,将查询结果封装在一个游标中,然后在报表解释程序中调用这个函数,动态地处理游标返回的数据,以生成所需的报表格式。这种方法既避免了频繁修改数据库...

    Oracle_的存储过程及游标

    Oracle的存储过程是数据库中一组预编译的SQL语句,它们封装在一起,形成一个可重用的单元,便于执行复杂的业务逻辑。...在实际开发中,应根据需求合理选择使用函数或存储过程,并灵活运用游标处理复杂查询和结果集。

    oracle函数调用存储过程

    ### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...

    oracle存储过程、游标、函数

    4. **减少网络流量**:只需发送调用存储过程的命令,而不是多次发送SQL语句。 在`oracle 过程、函数.sql`文件中,可能包含了创建、修改和执行存储过程的示例代码。 **二、Oracle游标** 游标(Cursor)是数据库系统...

    oracle基础--表、视图、过程、函数、游标、异常

    而函数与过程相似,但必须返回一个值,常用于计算或处理后返回结果。过程和函数都可以被其他程序调用,提高代码复用性。 “游标”在Oracle中用于逐行处理查询结果。游标允许我们动态地访问和操作结果集中的每一行。...

    Java调用Oracle存储过程的方法

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心...

    PLSQL操作存储过程、函数、游标、触发器、定时任务等实例SQL脚本.zip

    实例脚本可能包含创建、修改和调用存储过程的示例。 2. **函数**:与存储过程类似,函数也是预编译的代码块,但其返回一个值。函数通常用于计算或检索单一数据项。在PL/SQL中,我们可以定义自定义函数,然后在SQL...

    java调用Oracle存储过程

    本文将深入探讨如何使用Java与Oracle数据库进行交互,并调用存储过程。 首先,确保你已经在你的开发环境中安装了Oracle JDBC驱动,通常为ojdbc.jar。这个驱动允许Java应用程序连接到Oracle数据库并执行SQL语句以及...

    oracle的存储过程如何返回结果集

    ### Oracle存储过程返回结果集详解 #### 一、概述 在Oracle数据库中,存储过程是一种重要的编程组件,它能够执行一系列SQL语句并处理复杂的业务逻辑。存储过程的一个常见应用场景是返回结果集(Record Set),这有...

    oracle存储过程和函数PPT

    函数与存储过程类似,也是预编译的代码块,但它们的主要区别在于函数必须返回一个值,而存储过程可能不返回任何值。函数可以作为查询的一部分被嵌入到SQL语句中,提高了代码的可读性和效率。比如,你可以创建自定义...

Global site tag (gtag.js) - Google Analytics