Proc*c 游标的使用

本文你主要讲述动态游标以及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

                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 =offset+amount;

            index =index+strlen(buf);

        }       

}

完成以后关闭游标。

你可能感兴趣的:(Linux,C)