Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Nhận ORA-03115:kiểu dữ liệu mạng không được hỗ trợ hoặc lỗi đại diện khi tìm nạp mảng varchar từ pl / sql ẩn danh

java.sql.SQLException:ORA-03115:kiểu dữ liệu mạng không được hỗ trợ hoặc trình bày

Điều này được gây ra bởi câu lệnh sau:

cstmt.registerOutParameter(1, OracleTypes.ARRAY);

Câu lệnh này cho biết mảng sẽ là đầu ra, nhưng không chỉ định tên Kiểu Oracle thực làm tham số thứ ba. Bạn có thể kiểm tra Tài liệu Oracle này để biết thêm thông tin về điều này.

Chúng tôi có thể sửa ngoại lệ "java.sql.SQLException: ORA-03115: unsupported network datatype or representation "bằng cách thêm tham số thứ ba với tên Loại Oracle thực tế. Trong trường hợp của bạn, đó là NAMESARRAY .

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

Nhưng câu lệnh trên sẽ đưa ra ngoại lệ sau khi chạy:

java.sql.SQLException:mẫu tên không hợp lệ:SCOTT.NAMESARRAY

Điều này là do chúng tôi chưa khai báo loại NAMESARRAY bên trong DB. Ngoại lệ ở trên cho biết người dùng là SCOTT, nhưng bạn có thể kết nối với người dùng mà bạn chọn và tạo loại.

Tạo kiểu trong DB:

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

Sau khi chúng tôi tạo loại NAMESARRAY , nếu chúng tôi thực thi mã của bạn mà không thay đổi, chúng tôi sẽ gặp lỗi sau:

java.sql.SQLException:ORA-06550:dòng 1, cột 180:

PLS-00382:biểu thức không đúng loại ORA-06550:dòng 1, cột 173:

PL / SQL:Câu lệnh bị bỏ qua

Lỗi này là do chúng tôi đã xác định loại ở cấp người dùng, nhưng chúng tôi đang cố gắng tạo lại loại bên trong khối mã sau:

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

Vì vậy, chúng ta cần xóa khai báo kiểu khỏi đó.

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

Sau khi loại bỏ nó nếu chúng ta thực thi chương trình sau khi biên dịch, chúng ta sẽ có thể thấy kết quả sau:

Kavita
Pritam
Ayan
Rishav
Aziz

Sau đây là chương trình được cập nhật:

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. Oracle JDBC ojdbc6 Jar làm phụ thuộc Maven

  2. Ngày của Javascript thành đối tượng ngày sql

  3. Cách hiệu quả để cập nhật tất cả các hàng trong bảng

  4. Cách thực thi một thủ tục được lưu trữ Oracle thông qua liên kết cơ sở dữ liệu

  5. Làm cách nào để thoát dấu phẩy và dấu ngoặc kép cùng một lúc cho tệp CSV?