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

Không thể chèn dữ liệu Varchar2 bằng quy trình được lưu trữ với loại Bảng là tham số IN

Một số thay đổi nhỏ từ mã của bạn - sử dụng oracle.sql.ARRAY chứ không phải là java.sql.Array và sau đó sử dụng OracleConnection.setARRAYAtName() chứ không phải là Connection.setObject() để liên kết tham số.

(Lưu ý:điều này hoạt động khi sử dụng Oracle Driver ojdbc6.jar với Oracle 11.2.0.1)

Thiết lập Oracle ;

CREATE TYPE rec_type AS OBJECT( id NUMBER, descr VARCHAR2(100) );
/
CREATE TYPE tab_type AS TABLE OF rec_type;
/
CREATE TABLE bom OF rec_type;
/
CREATE PROCEDURE pBom( t IN tab_type )
IS
BEGIN
  FORALL i IN INDICES OF t
    INSERT INTO bom VALUES t(i);
END;
/

Java :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import oracle.jdbc.OracleCallableStatement;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;

public class TestDatabase2 {
  public static void main(String args[]){
    Connection con = null;
    try{
      Class.forName("oracle.jdbc.OracleDriver");

      con = DriverManager.getConnection(
        "jdbc:oracle:thin:@localhost:1521:XE",
        "username",
        "password"
      );

      ArrayDescriptor des = ArrayDescriptor.createDescriptor("TAB_TYPE", con);

      Object[] o1 = { 1, "ABC" };
      Object[] o2 = { 3, "DEF" };
      Object[] o3 = { 2, "GHI" };

      ARRAY objs = new ARRAY( des, con, new Object[][]{ o1, o2, o3 } );

      CallableStatement st = con.prepareCall("{ call pBOM( :arr )}");

      ((OracleCallableStatement) st).setARRAYAtName( "arr", objs );

      st.execute();
    } catch(ClassNotFoundException | SQLException e) {
      System.out.println(e);
    } finally {
       try {
         if ( con != null )
         {
           con.close();
         }
       } catch ( SQLException e ){}
    }
  }
}


  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 cập nhật các bản ghi có mối quan hệ từ 1 đến nhiều bảng trong một trình kích hoạt

  2. Thực thi truy vấn Oracle Ad Hoc với Tham số ràng buộc có lỗi; ORA-00907:thiếu dấu ngoặc đơn bên phải

  3. Cách thay đổi bảng thêm oracle cột

  4. Các công ty phần mềm đang làm việc trên Oracle D2k, PLSQL Technologies ở Noida

  5. Mở rộng ánh xạ gấp dấu phụ của Endeca