ページの先頭行へ戻る
HA Database Ready 業務開発ガイド(Open SQL編)
FUJITSU Integrated System

4.2.5 埋め込みSQLを利用する場合

以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。

アプリケーションの記述例
    EXEC SQL CONNECT TO ~ AS CON1 ~;

    EXEC SQL WHENEVER SQLERROR GOTO ERROR;
    …

    EXEC SQL ~;

ERROR:
    if (memcmp(SQLSTATE, "57P01", 5) == 0 ||
        memcmp(SQLSTATE, "57P02", 5) == 0 ||
        memcmp(SQLSTATE, "YE000", 5) == 0 ||
        memcmp(SQLSTATE, "26000", 5) == 0 )
    {
        if (ECPGget_PGconn("CON1"))
        {
            EXEC SQL WHENEVER SQLERROR CONTINUE;
            EXEC SQL DISCONNECT CON1;
        }
        /* 再接続処理へ */
    }

注意

データベースの切り替えが完了するまでは、コネクションの接続がエラー終了し、SQLSTATEに"08001"を返却します。

アプリケーションの記述例

5秒間隔で20回、再接続をリトライする場合。

    int count=0;
    …

RETRY:
    count++;
    EXEC SQL WHENEVER SQLERROR GOTO CON_ERROR;
    EXEC SQL CONNECT TO ~ AS CON1 ~;

    /* 再接続完了 */

CON_ERROR:
    if (memcmp(SQLSTATE, "08001", 5) == 0 )
    {
        if (count < 20) {
#if defined(WIN32)
            Sleep(5000);
#else
            sleep(5);
#endif
            goto RETRY;
        }
        else {
            /* 再接続失敗 */
        }
    }