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

ORA-03115 प्राप्त करना:अज्ञात pl/sql से varchar की सरणी लाते समय असमर्थित नेटवर्क डेटाटाइप या प्रतिनिधित्व त्रुटि

<ब्लॉकक्वॉट>

java.sql.SQLException:ORA-03115:असमर्थित नेटवर्क डेटाटाइप या प्रतिनिधित्व

यह निम्नलिखित कथन के कारण होता है:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

यह कथन कहता है कि सरणी आउटपुट होगी, लेकिन वास्तविक Oracle प्रकार नाम को तीसरे पैरामीटर के रूप में निर्दिष्ट नहीं किया। इस बारे में अधिक जानकारी के लिए आप इस Oracle Doc को देख सकते हैं।

हम अपवाद को ठीक कर सकते हैं "java.sql.SQLException: ORA-03115: unsupported network datatype or representation " वास्तविक Oracle प्रकार के नाम के साथ एक तीसरा पैरामीटर जोड़कर। आपके मामले में यह NAMESARRAY . है ।

cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");

लेकिन उपरोक्त कथन चलते समय निम्नलिखित अपवाद को फेंक देगा:

<ब्लॉकक्वॉट>

java.sql.SQLException:अमान्य नाम पैटर्न:SCOTT.NAMESARRAY

ऐसा इसलिए है क्योंकि हमने NAMESARRAY . प्रकार घोषित नहीं किया है डीबी के अंदर। उपरोक्त अपवाद उपयोगकर्ता को SCOTT कहता है, लेकिन आप अपनी पसंद के उपयोगकर्ता से जुड़ सकते हैं और प्रकार बना सकते हैं।

DB में प्रकार बनाना:

connect scott/tiger
CREATE OR REPLACE TYPE namesarray AS VARRAY(5) OF VARCHAR2(10) ;
/

एक बार जब हम टाइप कर लेते हैं NAMESARRAY , यदि हम आपके कोड को बदले बिना निष्पादित करते हैं तो हम निम्न त्रुटि का सामना करेंगे:

<ब्लॉकक्वॉट>

java.sql.SQLException:ORA-06550:लाइन 1, कॉलम 180:

PLS-00382:व्यंजक गलत प्रकार का है ORA-06550:पंक्ति 1, स्तंभ 173:

PL/SQL:कथन पर ध्यान नहीं दिया गया

यह त्रुटि इसलिए है क्योंकि हम पहले ही उपयोगकर्ता स्तर पर प्रकार को परिभाषित कर चुके हैं, लेकिन हम निम्नलिखित कोड ब्लॉक के अंदर फिर से प्रकार बनाने का प्रयास कर रहे हैं:

String dequeueQuery = "DECLARE " +
            " type namesarray IS VARRAY(5) OF VARCHAR2(10); " +
            " names namesarray;" +
            "   total integer;" +
            "   BEGIN " +
            "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
            "   ? := names;"+
            " END;";

इसलिए, हमें उसमें से टाइप डिक्लेरेशन को हटाना होगा।

String dequeueQuery = "DECLARE " +
            " names namesarray;" +
            "   total integer;" +
            "   BEGIN " +
            "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
            "   ? := names;"+
            " END;";

इसे हटाने के बाद यदि हम संकलन के बाद प्रोग्राम को निष्पादित करते हैं, तो हमें निम्न आउटपुट देखने में सक्षम होना चाहिए:

Kavita
Pritam
Ayan
Rishav
Aziz

अद्यतन कार्यक्रम निम्नलिखित है:

import java.io.*;
import java.sql.*;
import oracle.jdbc.*;

public class DBQC {
   public static void main(String[] args) {
   try {
      Connection con=null;
      Class.forName("oracle.jdbc.OracleDriver");
      String connStr = "jdbc:oracle:thin:scott/[email protected]//dbhost:1521/dbsrvc";
      con=DriverManager.getConnection(connStr);
      if(con != null)
      {
         System.out.println("Connection succeeded");

         String dequeueQuery = "DECLARE " +
            " names namesarray;" +
            "   total integer;" +
            "   BEGIN " +
            "   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz'); " +
            "   ? := names;"+
            " END;";

         CallableStatement cstmt = null;
         con.setAutoCommit(false);
         cstmt =(OracleCallableStatement)con.prepareCall(dequeueQuery);

         cstmt.registerOutParameter(1, OracleTypes.ARRAY,"NAMESARRAY");
         boolean b = cstmt.execute();
         Array arr = cstmt.getArray(1);

         String[] recievedArray = (String[]) arr.getArray();
         for (int i = 0; i < recievedArray.length; i++)
             System.out.println(recievedArray[i]);

         con.commit();
      }
      con.close();
    } catch(Exception e){e.printStackTrace();}
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सही उपयोगकर्ता नाम और पासवर्ड देकर, ORA-01017 प्राप्त करें:अमान्य उपयोगकर्ता नाम/पासवर्ड; लॉगऑन अस्वीकृत

  2. दशमलव (एस, पी) या संख्या (एस, पी)?

  3. ORA-12170:TNS:कनेक्ट टाइमआउट हुआ

  4. Oracle में डेटाबेस ऑब्जेक्ट के रूप में नेस्टेड टेबल कैसे बनाएं?

  5. SQL डेवलपर स्क्रिप्ट आउटपुट sys_refcursor चौड़ाई को छोटा करता है