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

Làm cách nào để lấy tham số đầu ra thủ tục được lưu trữ là một mảng để hoạt động?

Không sử dụng Mảng liên kết - sử dụng Bộ sưu tập:

CREATE TYPE StringArray IS TABLE OF VARCHAR2(4000);
CREATE TYPE CLOBArray   IS TABLE OF CLOB;

Sau đó, bạn có thể làm:

public void testString(Connection connection) {
  String[] values = { "alpha", "beta", "gamma" };
  try {
    OracleConnection oc = (OracleConnection) connection;

    ARRAY stringArray = oc.createARRAY( "STRINGARRAY", values ); // Upper case identifier

    OracleCallableStatement st = (OracleCallableStatement) oc.prepareCall(
      "begin test.upper( :in_array, :out_array ); end;"
    );

    st.setARRAYAtName( "in_array", stringArray );
    st.registerOutParameter( "out_array", Types.ARRAY, "STRINGARRAY"); // Upper case again
    st.execute();

    String[] result = (String[])st.getARRAY( 2 ).getArray();

    System.out.println("Length: " + result.length);
    System.out.println("First: " + result[0]);
  } (catch SQLException e) {
    // Handle error
  }
}

Nếu bạn phải sử dụng mảng liên kết PL / SQL làm đầu vào cho thủ tục của mình thì hãy viết một hàm nhận một tập hợp và xuất ra một mảng kết hợp có kiểu thích hợp và sau đó gọi hàm đó:

BEGIN TEST.UPPER( TO_ASSOC_ARRAY( :in_collection ), :out_array ); END;

Lưu ý:Câu trả lời này giả sử sử dụng trình điều khiển Oracle trong ojdbc6.jar mà dường như không có OracleConnection.createOracleArray() nhưng hy vọng nó sẽ có thể thay đổi được oracle.sql.ARRAY tới java.sql.Array và sử dụng các phương pháp mới hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mệnh đề Oracle SQL Where để tìm các bản ghi ngày cũ hơn 30 ngày

  2. Oracle's SYS_GUID () UUID RFC 4122 có tuân thủ không?

  3. Sự khác biệt giữa BYTE và CHAR trong các kiểu dữ liệu cột

  4. Hàm TRIM () trong Oracle

  5. Oracle sang Excel - Quy trình xuất PL / SQL