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

A.4 ポインタ型ホスト変数(可変長文字列型)の使用例

可変長文字列型のポインタ型ホスト変数を使用したサンプルプログラムを以下に示します。

なお、ポインタ型ホスト変数の詳細については、“3.1.8 ポインタ変数として宣言したホスト変数の使用方法”を参照してください。

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

EXEC  SQL  BEGIN  DECLARE  SECTION;
    char    SQLSTATE[6];
    char    SQLMSG[256];
    VARCHAR        *country;
    short          loop;
EXEC  SQL  END  DECLARE  SECTION;

#define MAX_COUNTRY 100

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;

    country = (struct country_SQLVAR *)malloc(256);
    printf("すべての国名を取り出します.\n");

    for ( loop=0; loop<MAX_COUNTRY; loop++ ) {
        country->sqllen = 254;
        EXEC SQL SELECT COUNTRY INTO :country
            FROM SCH.TBL
            WHERE DATANO = :loop;

        country->sqlvar[country->sqllen] = '\0';

        printf("%d件目の国名は%sです.\n", loop, country->sqlvar );
    }

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

    EXEC SQL DISCONNECT 'DB01';

    return 1;

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;
}