Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

LOBs

You can handle LOBs on Non-AutoCommit Mode in ALTIBASE HDB.
Therefore, Before you try to handle LOBs objects, you have to change commit-mode to Non-AutoCommit-Mode in your application.
If you handle LOB objects in auto-commit mode, you can see an error message as follows.

Code Block
none
none
SQLCODE = -332076
sqlca.sqlerrm.sqlerrmc = Connection is in autocommit mode. One can not operate on LOB datas with autocommit mode on.

BLOB

Code Block
c
c
EXEC SQL BEGIN DECLARE SECTION;
    int          sI1;
    char         sI2FName[32];
    unsigned int sI2FOpt;
    SQLLEN       sI2Ind;
EXEC SQL END DECLARE SECTION;

    sI1 = 1;
    strcpy(sI2FName,aInputFileName);
    sI2FOpt = APRE_FILE_READ;
    EXEC SQL INSERT INTO T_LOB VALUES(:sI1, BLOB_FILE :sI2FName OPTION :sI2FOpt INDICATOR :sI2Ind);


    strcpy(sI2FName, aOutFileName);
    sI2FOpt = APRE_FILE_CREATE;
    EXEC SQL SELECT * INTO :sI1, BLOB_FILE :sI2FName OPTION :sI2FOpt   INDICATOR :sI2Ind FROM T_LOB;

Sample Code occurred after insertion of text using host-variable, select it.

Code Block
c
c
APRE_BLOB *blob;
int n;

...
blob = (APRE_BLOB*)malloc(3000000);
if (blob == NULL)
    printf("error malloc\n");

...
fp  = fopen("mt1", "rb");
fseek(fp, 0, SEEK_END);
n = ftell(fp);
fseek(fp, 0, SEEK_SET);
fread(blob, n, 1 , fp);
fclose(fp);

EXEC SQL autocommit off;
// "n" indicator-variable used for length of blob-variable.
EXEC SQL INSERT INTO t3 values (:blob :n);
...

//
EXEC SQL SELECT c1 INTO :blob :n FROM t3 LIMIT 1;

CLOB

Code Block
c
c
EXEC SQL BEGIN DECLARE SECTION;
    int          sI1;
    char         sI2FName[32];
    unsigned int sI2FOpt;
    SQLLEN       sI2Ind;
EXEC SQL END DECLARE SECTION;

    sI1 = 1;
    strcpy(sI2FName,aInputFileName);
    sI2FOpt = APRE_FILE_READ;
    EXEC SQL INSERT INTO T_LOB VALUES(:sI1, CLOB_FILE :sI2FName OPTION :sI2FOpt INDICATOR :sI2Ind);


    strcpy(sI2FName, aOutFileName);
    sI2FOpt = APRE_FILE_CREATE;
    EXEC SQL SELECT * INTO :sI1, CLOB_FILE :sI2FName OPTION :sI2FOpt   INDICATOR :sI2Ind FROM T_LOB;

Sample Code occurred after insertion of text using host-variable, select it.

Code Block
c
c
FILE *fp;

APRE_CLOB clob[32000];
int n;
...
fp  = fopen("connect1.sc", "r");
fread(clob, sizeof(clob)-1, 1, fp);
fclose(fp);
n = strlen(clob);

EXEC SQL AUTOCOMMIT OFF;
EXEC SQL INSERT INTO t3 values (:clob :n);
...

EXEC SQL SELECT c1 INTO :clob :n FROM t3 LIMIT 1;
EXEC SQL COMMIT;