社区
Oracle 高级技术
帖子详情
pro*c中怎么正确定c变量来保存blob数据
poemsound
2012-08-20 10:48:47
pro*c中怎么正确定c变量来保存blob数据
...全文
232
3
打赏
收藏
pro*c中怎么正确定c变量来保存blob数据
pro*c中怎么正确定c变量来保存blob数据
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wqkjj
2012-08-21
打赏
举报
回复
不会吧,已经给了代码还不愿意截代码?
CLOB/BLOB不能直接通过变量去读的。
varchar l_acVarBuf[ 2048 ];
OCIClobLocator *clob = 0;
// 分配一个CLOB/BLOB对象
EXEC SQL ALLOCATE :clob;
// 将CLOB/BLOB列绑定到该对象
EXEC SQL select xmldoc into :clob from ibss_xml_order
where serv_nbr=:l_acServNbr and rownum <= 1;
// 获取该CLOB/BLOB对象信息,这里主要获取它的数据长度
EXEC SQL LOB DESCRIBE :clob GET LENGTH INTO :l_iClobLen;
// 然后读取它的数据,如果缓存区不够长,则可以多次读取
EXEC SQL LOB READ :l_iClobLen FROM :clob AT :l_iOffSet INTO :l_acVarBuf;
// 释放该对象
EXEC SQL FREE :clob;
wqkjj
2012-08-20
打赏
举报
回复
给一段代码你自己去取咯
int GetCLOBValueToFile( char *p_pacSrc, char *p_pacTag )
{
EXEC SQL BEGIN DECLARE SECTION;
int l_iType = 0;
char l_acServNbr[ 31 ];
EXEC SQL END DECLARE SECTION;
char *p = 0;
OCIClobLocator *clob = 0;
ub4 l_iClobLen = 0;
ub4 l_iOffSet = 1;
varchar l_acVarBuf[ 2048 ];
FILE *fp = 0;
char l_acRowNames[ 1024 ];
char l_acFile[ 255 ];
/*-----------暂时不用 chenqian_2010_05_06
if( ( p = GetVarRVal( "serv_nbr" )) == NULL )
{
PushErrMsg( "YU6005", "获取变量serv_nbr对应的值出错", NULL );
RETFAIL;
}
if( strlen( p ) > 30 )
{
PushErrMsg( "YU6015", "函数GetCLOBValueToFile:错误的参数[%s]", p, NULL );
RETFAIL;
}
strcpy( l_acServNbr, p );
EXEC SQL ALLOCATE :clob;
EXEC SQL select xmldoc into :clob from ibss_xml_order
where serv_nbr=:l_acServNbr and rownum <= 1;
if( SQLERR != 0 )
{
if( atoi( p_pacTag ) == 1 && (SQLERR == 100 || SQLERR == 1403 ))
{
PushErrMsg( "YU6025", "函数GetCLOBValueToFile:提示:ibss_xml_order表无工单号[%s]对应的记录", l_acServNbr, NULL );
EXEC SQL FREE :clob;
RETOK;
}
PushErrMsg( "YU6030", "函数GetCLOBValueToFile:执行SQL失败[%d][%s]",
SQLERR, SQLMSG, NULL );
EXEC SQL FREE :clob;
RETFAIL;
}
EXEC SQL select seq_file_sequence.nextval into :l_iType from dual;
if( SQLERR != 0 )
{
PushErrMsg( "YU6035", "函数GetCLOBValueToFile:取序列[seq_file_sequence]值失败[%d][%s]",
SQLERR, SQLMSG, NULL );
RETFAIL;
}
memset( l_acRowNames, 0x00, sizeof( l_acRowNames ) );
if( (char *)getenv( "TCPATH" ) != NULL )
strcpy( l_acRowNames, getenv( "TCPATH" ) );
else
strcpy( l_acRowNames, "./" );
sprintf( l_acFile, "%s/data/data.%s.%d", l_acRowNames, _GetOperID(), l_iType );
if( NULL == ( fp = fopen( l_acFile, (const char *)"w") ))
{
PushErrMsg( "YU6040", "打开文件[%s]失败[%d][%s]",l_acFile, errno,strerror(errno), NULL );
EXEC SQL FREE :clob;
RETFAIL;
}
EXEC SQL LOB DESCRIBE :clob GET LENGTH INTO :l_iClobLen;
while( 1 )
{
memset( l_acVarBuf.arr, 0x00, sizeof(l_acVarBuf.arr) );
EXEC SQL LOB READ :l_iClobLen FROM :clob AT :l_iOffSet INTO :l_acVarBuf;
if( SQLERR == 1403 || SQLERR == 100 )
break;
if( SQLERR != 0 )
{
PushErrMsg( "YU6045", "读取CLOB类型数据失败[%d][%s]", SQLERR, SQLMSG, NULL );
EXEC SQL FREE :clob;
fclose(fp);
RETFAIL;
}
fprintf( fp,"%s", (char *)l_acVarBuf.arr );
}
fprintf(fp,"%s",(char *)l_acVarBuf.arr);
EXEC SQL FREE :clob;
fclose( fp );
if( UpdateVarRVal( "file_flag", "1" ) < 0 )
{
PushErrMsg( "YU6050", "函数GetCLOBValueToFile语句[%s]更新变量[file_flag]值[1]失败",
p_pacSrc, NULL );
RETFAIL;
}
if( UpdateVarRVal( "file_path", l_acFile ) < 0 )
{
PushErrMsg( "YU6055", "函数GetCLOBValueToFile语句[%s]更新变量[file_path]值[%s]失败",
p_pacSrc, l_acFile, NULL );
RETFAIL;
}
*/
RETOK;
}
poemsound
2012-08-20
打赏
举报
回复
EXEC SQL BEGIN DECLARE SECTION;
char buf[5000];
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE mnt_cur SCROLL CURSOR FOR
SELECT mnt
FROM fp_01;
EXEC SQL OPEN mnt_cur;
EXEC SQL FETCH FIRST mnt_cur INTO
:buf;
printf("\n%d",sqlca.sqlcode);
这是摘出来的代码,mnt是blob数据,这样出来返回值是<0,求详解啊!buf应该怎么定义啊!!谢谢啦!
Oracle
pro
c
很好,很实用,嵌入了SQL LOB 类型处理结构 ※ 增加了对标准动态SQL 接口的支持
Pro
*C/C++从此版本起具备了执行标准动态SQL 语句的接口,增强了Oracle 动态 语句接口的功能。标准动态SQL 语句接口支持所有Oracle 的
数据
类型,包括 Objects,结构数组,游标
变量
和LOBS。 ※ DML 语句开始支持返回
基于
Pro
*C/C++的嵌入式SQL程序开发实战详解
在
Pro
C程序
中
,声明节(DECLARE SECTION)* 是一个专门用于声明主机
变量
(Host Variables)和指示器
变量
(Indicator Variables)的区域。所有需要在嵌入式SQL语句
中
使用的C语言
变量
都必须在此区域内声明,否则预编译器将无法识别它们作为SQL上下文的一部分。声明节的标准语法如下:// 主机
变量
声明int emp_id;// 指示器
变量
此结构必须成对出现,且不可嵌套。一旦进入。
pro
c*c/c++简介
一、概述 1. 概念 通过在过程化编程语言C/C++
中
嵌入SQL语句而开发出的应用程序。在通用编程语言
中
使用的SQL称为嵌入式SQL。 在SQL标准
中
定义了多种语言的嵌入式SQL ,各个厂商对嵌入式SQL的具体实现不同。 在C/C++语言
中
嵌入SQL语句而开发出的应用程序称为
Pro
*C/C++程序。 目的:使c/c++这种高效率语言成为访问
数据
库的工具。 嵌入式SQL的载体是宿主...
Blob
数据
类型&
数据
库事务,
数据
库连接池
文章目录一、 操作
BLOB
类型字段1.1 MySQL
BLOB
类型1.2 向
数据
表
中
插入大
数据
类型1.3 修改
数据
表
中
的
Blob
类型字段1.4 从
数据
表
中
读取大
数据
类型二、 批量插入2.1 批量执行SQL语句2.2 高效的批量插入2.2.1 实现层次一:使用Statement2.2.2 实现层次二:使用PreparedStatement2.2.3 实现层次三2.2.4 实现层次四三、
数据
库事务3.1
数据
库事务介绍3.2 JDBC事务处理3.3 事务的ACID属性3.3.1
数据
库的并发问题3.3.2 .
Blob
数据
类型&
数据
库事务&
数据
库连接池
BLOB
类型 插入大
数据
类型 //获取连接 Connection conn = JDBCUtils.getConnection(); String sql = "insert into customers(name,email,birth,photo)values(?,?,?,?)"; PreparedStatement ps = conn.prepareStatement(sql); // 填充占位符 ps.setString(1, "徐海强"); ps.setString(2, "xhq@
Oracle 高级技术
3,499
社区成员
18,709
社区内容
发帖
与我相关
我的任务
Oracle 高级技术
Oracle 高级技术相关讨论专区
复制链接
扫一扫
分享
社区描述
Oracle 高级技术相关讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章