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

A.5 ポインタ型ホスト変数(BLOB型)の使用例

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

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

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

EXEC  SQL  BEGIN  DECLARE  SECTION;
    char    SQLSTATE[6];
    char    SQLMSG[256];
    short   datano;
    SQL TYPE IS BLOB    *image;
EXEC  SQL  END  DECLARE  SECTION;

void putmsgx(void);

main(void){
    short   execute;

    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;

    image = (struct image_SQLBLOB *)malloc( 10240 + 8 );
    image->image_length = 10240;
    datano = 5;

    /* データの取得 */
    EXEC SQL SELECT IMAGE
            INTO :image
            FROM SCH01.TBL01
            WHERE DATANO = :datano;

    /* 最初の50バイトを出力 */
    image->image_data[50] = '\0';
    printf("データ(%d)%s\n",image->image_length,image->image_data);


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