sql >> データベース >  >> RDS >> Oracle

MyBatisを使用してオブジェクトのJavaリストをOracleストアドプロシージャに渡す方法は?

    すでに行っているかどうかはわかりませんが、Oracleオブジェクトを定義する必要があります。

    CREATE OR REPLACE TYPE SCHEMA."YOUR_OBJECT" AS OBJECT
    (
        field_one    varchar2(50),
        field_two    varchar2(100)
    );
    /
    CREATE OR REPLACE TYPE SCHEMA."YOUR_OBJECT_ARRAY" AS TABLE OF YOUR_OBJECT;
    /
    

    次に、タイプハンドラを記述して、JavaオブジェクトをOracleオブジェクトにマップできます。

    import oracle.sql.ARRAY;
    import oracle.sql.ArrayDescriptor;
    import oracle.sql.STRUCT;
    import oracle.sql.StructDescriptor;
    ....
    public class YourTypeHandler implements TypeHandler
    {
    ....
        public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException
        {
            List<YourObject> objects = (List<YourObject>) parameter;
    
            StructDescriptor structDescriptor = StructDescriptor.createDescriptor("YOUR_OBJECT", ps.getConnection());
    
            STRUCT[] structs = new STRUCT[objects.size()];
            for (int index = 0; index < objects.size(); index++)
            {
                YourObject pack = packs.get(index);
                Object[] params = new Object[2];
                params[0] = pack.getFieldOne();
                params[1] = pack.getFieldTwo();
                STRUCT struct = new STRUCT(structDescriptor, ps.getConnection(), params);
                structs[index] = struct;
            }
    
            ArrayDescriptor desc = ArrayDescriptor.createDescriptor("YOUR_OBJECT_ARRAY", ps.getConnection());
            ARRAY oracleArray = new ARRAY(desc, ps.getConnection(), structs);
            ps.setArray(i, oracleArray);
        }
    }
    

    次に、プロシージャを呼び出します。

    call your_proc
    (
    #{yourObjects, javaType=Object, jdbcType=ARRAY, jdbcTypeName=YOUR_OBJECT_ARRAY, mode=IN, typeHandler=YourObjectArrayTypeHandler}
    )
    


    1. EssentialPostgreSQLモニタリング-パート1

    2. Postgresql UUIDはHibernateでサポートされていますか?

    3. Apache 2.2、MySQL 5.0、およびPHP5を使用したFreeBSD6.0へのWebサーバーのインストール–パート3

    4. 自動化を使用してPostgreSQLのリリーステストを高速化