आप जावा से पीएलएसक्यूएल ऑब्जेक्ट्स (केस 2 और 5 =पैकेज-स्तरीय ऑब्जेक्ट्स) तक नहीं पहुंच सकते हैं, "ओरेकल संग्रहीत प्रक्रिया में जावा - पासिंग सरणी" देखें। हालाँकि आप SQL प्रकार (केस 1 और 4) तक पहुँच सकते हैं।
पीएल/एसक्यूएल से जावा में आउट पैरामीटर प्राप्त करने के लिए, आप OracleCallableStatement का उपयोग करके टॉम काइट के धागे में से एक में वर्णित विधि का उपयोग कर सकते हैं। आपके कोड में एक अतिरिक्त चरण होगा क्योंकि आप VARCHAR की तालिका के बजाय ऑब्जेक्ट की तालिका प्राप्त कर रहे हैं।
SQL ऑब्जेक्ट की तालिका का उपयोग करके एक डेमो यहां दिया गया है, पहले सेटअप:
SQL> CREATE TYPE t_type AS OBJECT (val VARCHAR(4));
2 /
Type created
SQL> CREATE TYPE t_table AS TABLE OF t_type;
2 /
Type created
SQL> CREATE OR REPLACE PROCEDURE p_sql_type (p_out OUT t_table) IS
2 BEGIN
3 p_out := t_table(t_type('a'), t_type('b'));
4 END;
5 /
Procedure created
वास्तविक जावा वर्ग (dbms_output.put_line
. का उपयोग करके) लॉग इन करने के लिए क्योंकि मैं इसे SQL से कॉल करूंगा, System.out.println
. का उपयोग करें अगर जावा से कहा जाता है):
SQL> CREATE OR REPLACE
2 AND COMPILE JAVA SOURCE NAMED "ArrayDemo"
3 as
4 import java.sql.*;
5 import oracle.sql.*;
6 import oracle.jdbc.driver.*;
7
8 public class ArrayDemo {
9
10 private static void log(String s) throws SQLException {
11 PreparedStatement ps =
12 new OracleDriver().defaultConnection().prepareStatement
13 ( "begin dbms_output.put_line(:x); end;" );
14 ps.setString(1, s);
15 ps.execute();
16 ps.close();
17 }
18
19 public static void getArray() throws SQLException {
20
21 Connection conn = new OracleDriver().defaultConnection();
22
23 OracleCallableStatement cs =
24 (OracleCallableStatement)conn.prepareCall
25 ( "begin p_sql_type(?); end;" );
26 cs.registerOutParameter(1, OracleTypes.ARRAY, "T_TABLE");
27 cs.execute();
28 ARRAY array_to_pass = cs.getARRAY(1);
29
30 /*showing content*/
31 Datum[] elements = array_to_pass.getOracleArray();
32
33 for (int i=0;i<elements.length;i++){
34 Object[] element = ((STRUCT) elements[i]).getAttributes();
35 String value = (String)element[0];
36 log("array(" + i + ").val=" + value);
37 }
38 }
39 }
40 /
Java created
आइए इसे कॉल करें:
SQL> CREATE OR REPLACE
2 PROCEDURE show_java_calling_plsql
3 AS LANGUAGE JAVA
4 NAME 'ArrayDemo.getArray()';
5 /
Procedure created
SQL> EXEC show_java_calling_plsql;
array(0).val=a
array(1).val=b