sql >> Database >  >> RDS >> Oracle

ORA-03115 ophalen:niet-ondersteund netwerkgegevenstype of weergavefout tijdens het ophalen van array van varchar van anonieme pl/sql

java.sql.SQLException:ORA-03115:niet-ondersteund netwerkgegevenstype of representatie

Dit wordt veroorzaakt door de volgende verklaring:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

Deze instructie zegt dat array de uitvoer zal zijn, maar specificeerde niet de daadwerkelijke Oracle Type-naam als derde parameter. U kunt dit Oracle-document raadplegen voor meer informatie hierover.

We kunnen de uitzondering "java.sql.SQLException: ORA-03115: unsupported network datatype or representation oplossen " door een derde parameter toe te voegen met de werkelijke Oracle Type-naam. In uw geval is dit NAMESARRAY .

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

Maar de bovenstaande verklaring veroorzaakt de volgende uitzondering tijdens het uitvoeren:

java.sql.SQLException:ongeldig naampatroon:SCOTT.NAMESARRAY

Dit komt omdat we het type NAMESARRAY niet hebben gedeclareerd binnen DB. De bovenstaande uitzondering zegt dat de gebruiker SCOTT is, maar u kunt verbinding maken met de gebruiker van uw keuze en een type aanmaken.

Type maken in DB:

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

Zodra we het type NAMESARRAY hebben aangemaakt , als we uw code uitvoeren zonder te wijzigen, krijgen we de volgende fout:

java.sql.SQLException:ORA-06550:regel 1, kolom 180:

PLS-00382:uitdrukking is van het verkeerde type ORA-06550:regel 1, kolom 173:

PL/SQL:Verklaring genegeerd

Deze fout is omdat we het type al op gebruikersniveau hebben gedefinieerd, maar we proberen het type opnieuw te maken binnen het volgende codeblok:

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;";

Dus we moeten de typedeclaratie daarvan verwijderen.

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

Als we het programma na het compileren hebben verwijderd, zouden we de volgende uitvoer moeten kunnen zien:

Kavita
Pritam
Ayan
Rishav
Aziz

Hieronder volgt het bijgewerkte programma:

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. Kan GI 12.1.0.2 en Segmentatiefout niet compileren

  2. Relationeel databasebeheersysteem (RDBMS):MSSQL versus MySQL

  3. Slaapstand> CLOB> Oracle :(

  4. Wijzig database-sortering, Ctype in Postgresql