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

ऑरैकल में आउट पैरामीटर के रूप में टेबल कैसे प्राप्त करें

इसे मैप करने के लिए आपको एक sqldata ऑब्जेक्ट को परिभाषित करना होगा।

दस्तावेज़ीकरण:http://docs.oracle.com /cd/E11882_01/java.112/e16548/oraarr.htm#JJDBC28574

उदाहरण के लिए:

SQL> create or replace TYPE tableOneExample AS OBJECT (
  2        somethingOne                 VARCHAR2 (4)
  3       ,somethingTwo        NUMBER (12)
  4  );
  5  /

Type created.

SQL> create or replace TYPE outputOneSQLType IS TABLE OF tableOneExample;
  2  /

Type created.

SQL>
SQL> create or replace PROCEDURE myprocedure (
  2  inputParam                IN       VARCHAR2,
  3  outputOne                 OUT outputOneSQLType)
  4  as
  5  begin
  6  outputOne  := outputOneSQLType(tableOneExample('a', 1), tableOneExample('b', 2));
  7  end;
  8  /

Procedure created.

अब हम SQLDATA इंटरफ़ेस को परिभाषित करते हैं:

import java.sql.*;

public class TestArr implements SQLData
 {
  private String sql_type;

  public String attrOne;
  public int    attrTwo;

  public TestArr() 
  { 
  }
  public TestArr (String sql_type, String attrOne, int attrTwo)
  {
    this.sql_type = sql_type;
    this.attrOne = attrOne;
    this.attrTwo = attrTwo;
   }

  // define a get method to return the SQL type of the object
  public String getSQLTypeName() throws SQLException
  { 
    return sql_type; 
  } 

  // define the required readSQL() method 
  public void readSQL(SQLInput stream, String typeName)
    throws SQLException
  {
    sql_type = typeName;

    attrOne = stream.readString();
    attrTwo = stream.readInt();
  }  
  // define the required writeSQL() method 
  public void writeSQL(SQLOutput stream)
    throws SQLException
  { 
    stream.writeString(attrOne);
    stream.writeInt(attrTwo);
  }
}

सुनिश्चित करें कि स्ट्रीम लिखने/पढ़ने के इनपुट और क्रम आपके ऑरैकल प्रकार के समान हैं, क्योंकि कोई भी असंगतता आंतरिक प्रतिनिधित्व त्रुटियां देगी।

फिर मुख्य कक्षा में, आप इसे इस प्रकार मैप करेंगे:

CallableStatement stmt = conn.prepareCall("begin myprocedure(?,?); end;");
stmt.setString(1, "foo");
stmt.registerOutParameter(2, java.sql.Types.ARRAY, "OUTPUTONESQLTYPE"); // YOUR ARRAY TYPE (TO MATCH THE API OUTPUT), NOT OBJECT
stmt.execute();
Array arr = stmt.getArray (2);
Map map = conn.getTypeMap();
map.put("TABLEONEEXAMPLE", Class.forName("TestArr")); // YOUR OBJECT TYPE, NOT ARRAY.
Object[] values = (Object[]) arr.getArray();
for (int i=0; i < values.length; i++)
{
  TestArr a = (TestArr)values[i];
  System.out.println("somethingOne: " + a.attrOne);
  System.out.println("somethingTwo: " + a.attrTwo);
}

परिणाम bieng:

M:\Documents\Sample Code\1>javac TestArr.java

M:\Documents\Sample Code\1>javac ArrayTest.java
Note: ArrayTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

M:\Documents\Sample Code\SQLComplexArray>java ArrayTest
Opening Oracle connection...done.
somethingOne: a
somethingTwo: 1
somethingOne: b
somethingTwo: 2



  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. PL/SQL में किसी दिनांक से दिनों की संख्या घटाना

  3. C# को Oracle डेटाबेस से जोड़ने के लिए आवश्यक न्यूनतम क्लाइंट फुटप्रिंट क्या है?

  4. केवल चुनिंदा विशेषाधिकारों के साथ अलग-अलग उपयोगकर्ता स्थान पर ऑरैकल डेटाबेस पर हाइबरनेट के माध्यम से फ़ील्ड तक पहुंचने में सक्षम नहीं है

  5. ओरेकल नेस्टेड टेबल में अधिकतम पंक्तियों की गणना क्या है