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 |
---|
|
SQLCODE = -332076
sqlca.sqlerrm.sqlerrmc = Connection is in autocommit mode. One can not operate on LOB datas with autocommit mode on.
|
BLOB
Code Block |
---|
|
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 |
---|
|
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 |
---|
|
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 |
---|
|
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;
|