Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mendapatkan ORA-03115:tipe data jaringan atau kesalahan representasi yang tidak didukung saat mengambil array varchar dari pl/sql anonim

java.sql.SQLException:ORA-03115:tipe data atau representasi jaringan tidak didukung

Hal ini disebabkan oleh pernyataan berikut:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

Pernyataan ini mengatakan array akan menjadi output, tetapi tidak menentukan nama Oracle Type yang sebenarnya sebagai parameter ketiga. Anda dapat memeriksa Dokumen Oracle ini untuk informasi lebih lanjut tentang ini.

Kami dapat memperbaiki pengecualian "java.sql.SQLException: ORA-03115: unsupported network datatype or representation " dengan menambahkan parameter ketiga dengan nama Oracle Type yang sebenarnya. Dalam kasus Anda ini adalah NAMESARRAY .

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

Tetapi pernyataan di atas akan mengeluarkan pengecualian berikut saat menjalankan:

java.sql.SQLException:pola nama tidak valid:SCOTT.NAMESARRAY

Ini karena kami belum mendeklarasikan jenis NAMESARRAY di dalam DB. Pengecualian di atas menyebutkan pengguna sebagai SCOTT, tetapi Anda dapat terhubung ke pengguna pilihan Anda dan membuat jenis.

Membuat jenis di DB:

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

Setelah kita membuat jenis NAMESARRAY , jika kami mengeksekusi kode Anda tanpa mengubahnya, kami akan mendapatkan kesalahan berikut:

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

PLS-00382:ekspresi salah ketik ORA-06550:baris 1, kolom 173:

PL/SQL:Pernyataan diabaikan

Kesalahan ini karena kami telah mendefinisikan tipe di tingkat pengguna, tetapi kami mencoba membuat tipe lagi di dalam blok kode berikut:

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

Jadi, kita perlu menghapus deklarasi tipe dari itu.

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

Setelah menghapusnya jika kita menjalankan program setelah kompilasi, kita seharusnya dapat melihat output berikut:

Kavita
Pritam
Ayan
Rishav
Aziz

Berikut adalah program yang diperbarui:

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. Perlu menemukan waktu pemrosesan rata-rata antara semua catatan cap waktu di Oracle SQL

  2. Bagaimana saya bisa mengatasi ORA-00911:kesalahan karakter tidak valid?

  3. Erlang dan konsumsi Memori Heapnya

  4. ORA-06508:PL/SQL:tidak dapat menemukan unit program yang dipanggil

  5. Apakah mungkin menggunakan pengembalian dalam prosedur tersimpan?