簡介
本文檔演示如何從 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>/
- 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.ARRAY 的 getArray()
方法獲得數組的內容並將內容打印出來。
總結
本文檔說明了如何創建 VARRAY 並從 PL/SQL 存儲函數返回數組,以及如何從 java 應用程序訪問它。