Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

JDBC का उपयोग करके संग्रहीत कार्यविधि से Oracle तालिका प्रकार प्राप्त करें

आप जावा से पीएलएसक्यूएल ऑब्जेक्ट्स (केस 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्कर एसक्यूएल डेवलपर से अग्रणी शून्य को हटा रहा है

  2. कैसे SID Oracle में सेवा नाम से अलग है tnsnames.ora

  3. Oracle में किसी उपयोगकर्ता को दिए गए विशेषाधिकारों और भूमिकाओं को कैसे खोजें?

  4. मैं Oracle 11g को एकल SQL क्वेरी के लिए अधिक CPU का उपभोग करने के लिए बाध्य क्यों नहीं कर सकता?

  5. क्लाउड में Oracle ऑटोनॉमस डेटाबेस के साथ शुरुआत करना