Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Nie można wstawić danych Varchar2 przy użyciu procedury składowanej z typem tabeli jako parametrem IN

Kilka drobnych zmian w kodzie — przy użyciu oracle.sql.ARRAY zamiast java.sql.Array a następnie za pomocą OracleConnection.setARRAYAtName() zamiast Connection.setObject() aby powiązać parametr.

(Uwaga:działało to przy użyciu sterownika Oracle ojdbc6.jar z Oracle 11.2.0.1)

Konfiguracja 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;
/

Jawa :

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. Powiązane z Oracle DataAccess:Wywoływany element członkowski nie jest obsługiwany w zestawie dynamicznym.

  2. Odbicie w PLSQL?

  3. Konfiguracja heterogenicznej replikacji baz danych — SQL Server do Oracle

  4. upłynął limit czasu. wszystkie połączenia w puli były używane i osiągnięto maksymalny rozmiar puli

  5. Oracle SQL - utwórz ciąg przez łączenie wierszy, ale nie przekracza X znaków