0

DB2 から ORACLE 11g に移植しようとしていますが、これを行うには、アプリケーションのコードを変更する必要があります (アプリケーション全体を書き直すのを避けます)。"WITH UR" (Uncommitted Read を使用) ステートメントは、ダーティ リードをサポートしていないため、ORACLE では機能しません。ファイルにプロパティが設定された「IF」をコードに入れることを回避する、これを行うためのエレガントで簡単な方法またはパターンはありますか(汚い解決策)?

@Override
public List<Object[]> receiptSummary(String idENTITY) {

    List<Object[]> listObj = new ArrayList<Object[]>();

    try {

        StringBuilder sqlQuery = new StringBuilder();
        sqlQuery.append("SELECT TE.DE_TRB AS TYPE_DEBT, COUNT(*) AS NUM_RECEIPTS, SUM(BBR.AMOUNT) AS AMOUNT ")
                .append("FROM DRAFTS_TRANSFERS_CREDITING BBR, TRANSFERS_CREDITING BR, LISTS_CREDITING DR, CONDITIONS C, PAYINGS TE ")
                .append("WHERE ");

        if (idENTITY != null && !idENTITY.isEmpty()) {
            sqlQuery.append("BBR.ID_ENTITY = :id_ENTITY AND ");
        }

        sqlQuery.append("BBR.ID_TRANSFERS_CREDITING=BR.ID ")
                .append("AND BR.ID_LISTS_CREDITING = DR.ID ")
                .append("AND C.ID_CONDITION = BBR.ID_CONDITION ")
                .append("AND DR.STATE='DONE' ")
                .append("AND TE.CD_TRB_ENTITY = C.CD_TRB_ENTITY ")
                .append("GROUP BY TE.DE_TRB ")
                .append("WITH UR"); //FIXME: FOR ORACLE

        Query q = em.createNativeQuery(sqlQuery.toString());

        if (idENTITY != null && !idENTITY.isEmpty()) {
            q.setParameter("id_ENTITY", idENTITY);
        }

        String msg = "DAO - receiptSummary - id_ENTITY:" + idENTITY;

        if (Tracer.isDebugEnabled(this.getClass().getName())) {
            Tracer.debug(this.getClass().getName(), "receiptSummary", msg);
            Tracer.debug(this.getClass().getName(), "receiptSummary", sqlQuery.toString());
        }

        System.out.println("receiptSummary - " + msg);
        System.out.println("receiptSummary - " +  sqlQuery.toString());

        listObj = (List<Object[]>) q.getResultList();

    } catch (Exception e) {
        Tracer.error(this.getClass().getName(), "receiptSummary", e.getMessage());
        e.printStackTrace();
    }

    return listObj;
}
4

0 に答える 0