ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

A.8 構造体型標識変数の使用例

構造体型標識変数を使用したサンプルプログラムを以下に示します。

なお、構造体型標識変数の詳細については、“3.1.9 構造体として宣言したホスト変数の使用方法”を参照してください。

#include<stdio.h>
#include<string.h>

EXEC  SQL  BEGIN  DECLARE  SECTION;
    char    SQLSTATE[6];
    char    SQLMSG[256];
    struct {
      long    num;
      char    name[21];
      char    atta[41];
      short   year;
    } data;
    struct {
     short     ind1;
     short     ind2;
     short     ind3;
     short     ind4;
    } indi;
    short    number;
EXEC  SQL  END  DECLARE  SECTION;

void putmsgx(void);

main(void){

    EXEC SQL WHENEVER SQLERROR GOTO :CONNECT_ERROR;

    EXEC SQL CONNECT TO 'DB01';

    EXEC SQL WHENEVER SQLERROR GOTO :STM_ERROR;
    EXEC SQL WHENEVER NOT FOUND GOTO :NOT_FOUND_ERROR;

    number = 1;

    /* データの取得 */
    EXEC SQL SELECT COL01, COL02, COL03, COL04 INTO :data :indi
             FROM SCH01.TBL01
             WHERE NUMBER = :number;

    printf( "COL1=%d", data.num );
    printf( "IND=%d", indi.ind1 );
    printf( "COL2=%s", data.name );
    printf( "IND=%d", indi.ind2 );
    printf( "COL3=%s", data.atta );
    printf( "IND=%d", indi.ind3 );
    printf( "COL4=%d", data.year );
    printf( "IND=%d", indi.ind4 );

STM_ERROR:
    putmsgx();
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL COMMIT WORK;

    EXEC SQL DISCONNECT 'DB01';

    return 1;

NOT_FOUND_ERROR:
    printf("\n該当データはありません.\n");
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK WORK;
    EXEC SQL DISCONNECT 'DB01';

    return 0;

CONNECT_ERROR:
    putmsgx();

    return 1;
}

void putmsgx( void )  {
    int i;
    for ( i = sizeof(SQLMSG) - 2 ; SQLMSG[i] == ' ' ; i-- );
    SQLMSG[++i] = '\0';
    SQLSTATE[5]='\0';
    printf( "SQLMSG:%s\n" , SQLMSG );
    printf( "SQLSTATE:%s\n" , SQLSTATE );
    return;
}