本文你主要讲述动态游标以及Blob类型的数据转换为Char类型的应用。
动态游标主要应用在表名,列名不确定的情况。
假设name 的类型为Blob 类型。那么取出时临时保存到Blob 空间需要先 EXEC SQL ALLOCATE blob开辟空间。
1.首先拼接字符串语句。
sprintf(sql,"select name,id from %s m where 条件");
2. EXEC SQL PREPARE sel FROM :sql;准备语句。
3. EXEC SQL DECLARE cur_use CURSOR FOR sel; 声明游标
4.EXEC SQL OPEN cur_use; 打开游标
WHILE(1)
{
EXEC SQL FETCH cur_use into:blob ,id;循环取出数据保存到blob,以及id 类型中。
if (sqlca.sqlcode ==1403) 为空时跳出循环。
break;
当blob类型过长时,需要循环转换BLob类型到char类型内,
EXEC SQL LOB DESCRIBE :blob GET LENGTH INFO:_len;
offset =1;
index =0;
for(;;){
if(_len -offset <LENGTH)blob_len =amount =_len-offset;
else blob_len =amount =LENGTH;
EXEC SQL LOB READ:blob_len FROM :blob AT:offset INTO:buf;//保存到buf里,需要将buf转换为EXEC SQL VAR buf is LONG RAW(LENGTH);
memcpy(bbuf+index,buf,strlen(buf));
if (_len <offset) break;
offset =offset+amount;
index =index+strlen(buf);
}
}
完成以后关闭游标。