コード例 #1
0
ファイル: lob.c プロジェクト: Captnwalker1/ruby-oci8
static void open_bfile(oci8_svcctx_t *svcctx, oci8_lob_t *lob, OCIError *errhp)
{
    while (1) {
        sword rv = OCILobFileOpen_nb(svcctx, svcctx->base.hp.svc, errhp, lob->base.hp.lob, OCI_FILE_READONLY);
        if (rv == OCI_ERROR && oci8_get_error_code(oci8_errhp) == 22290) {
            /* ORA-22290: operation would exceed the maximum number of opened files or LOBs */
            /* close all opened BFILE implicitly. */
            oci8_base_t *base;
            for (base = &lob->base; base != &lob->base; base = base->next) {
                if (base->type == OCI_DTYPE_LOB) {
                    oci8_lob_t *tmp = (oci8_lob_t *)base;
                    if (tmp->state == S_BFILE_OPEN) {
                        chker2(OCILobFileClose_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, tmp->base.hp.lob),
                               &svcctx->base);
                        tmp->state = S_BFILE_CLOSE;
                    }
                }
            }
        } else {
            chker2(rv, &svcctx->base);
            lob->state = S_BFILE_OPEN;
            return;
        }
    }
}
コード例 #2
0
ファイル: lob.c プロジェクト: aq1018/ruby-oci8
static void bfile_close(oci8_lob_t *lob)
{
    if (lob->state == S_BFILE_OPEN) {
        oci8_svcctx_t *svcctx = oci8_get_svcctx(lob->svc);

        oci_lc(OCILobFileClose_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob));
        lob->state = S_BFILE_CLOSE;
    }
}
コード例 #3
0
ファイル: lob.c プロジェクト: Captnwalker1/ruby-oci8
static void bfile_close(oci8_lob_t *lob)
{
    if (lob->state == S_BFILE_OPEN) {
        oci8_svcctx_t *svcctx = check_svcctx(lob);

        chker2(OCILobFileClose_nb(svcctx, svcctx->base.hp.svc, oci8_errhp, lob->base.hp.lob),
               &svcctx->base);
        lob->state = S_BFILE_CLOSE;
    }
}