Oracle
 sql >> база данни >  >> RDS >> Oracle

Получаване на ORA-03115:неподдържан мрежов тип данни или грешка при представяне при извличане на масив от varchar от анонимен pl/sql

java.sql.SQLEизключение:ORA-03115:неподдържан тип мрежови данни или представяне

Това е причинено от следното изявление:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

Това изявление казва, че масивът ще бъде изходът, но не посочва действителното име на Oracle Type като трети параметър. Можете да проверите този Oracle Doc за повече информация по въпроса.

Можем да коригираме изключението „java.sql.SQLException: ORA-03115: unsupported network datatype or representation " чрез добавяне на трети параметър с действително име на Oracle Type. Във вашия случай това е NAMESARRAY .

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

Но горният оператор ще изведе следното изключение, докато работи:

java.sql.SQLEException:невалиден модел на име:SCOTT.NAMESARRAY

Това е така, защото не сме декларирали типа NAMESARRAY вътре в БД. Горното изключение казва, че потребителят е SCOTT, но можете да се свържете с потребител по ваш избор и да създадете тип.

Тип създаване в БД:

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

След като създадем типа NAMESARRAY , ако изпълним кода ви без промяна, ще ударим следната грешка:

java.sql.SQLEизключение: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. 27 oracle dba скрипта за Oracle Database за администриране и наблюдение

  2. HikariCP:Какви изчаквания на ниво база данни трябва да се имат предвид, за да се зададе maxLifetime за Oracle 11g

  3. Ограничаване на върнатия запис от SQL заявка в Oracle

  4. Регулярни изрази на Oracle. Опасна гама

  5. Как да добавя изместване в заявка за избор в Oracle 11g?