免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5916 | 回复: 1
打印 上一主题 下一主题

请教db2下嵌入式sql-c 开发问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-08 19:53 |只看该作者 |倒序浏览
在db2下使用嵌入式sql-c编程,遇到两个问题,希望能得到大家帮助

(1)在db2下的字符串是用char(n)来储存的,就连
insert into tablename values ('string',...) 也是用单引号,
现在用esql-c将其读出,结尾好像并没有'\0'来标识,直接printf都会有乱码,
如何能够得到和插入时一样的字符串?

(2)现在我能正常编译运行静态sql程序,但是在尝试用相同的方法编译最简单的动态sql
strcpy(st,"select * from table");
exec sql prepare p1 from :st;
exec sql excute p1;

都会报错
An unexpected token "END-OF-STATEMENT" was found
following "excute p1".  Expected tokens may include:  "JOIN
<joined_table>".  SQLSTATE=42601

然后prepare也报错
Error occured : Prepare operation.
SQLCODE : -818
SQL0818N  A timestamp conflict occurred.  SQLSTATE=51003

是不是我编译动态sql的方式错了?
db2 connect to stores   
db2 prep test.sqc bindfile
db2 bind test.bnd   
db2 connect reset      
cc -c -O -I../sqllib/include test.c
cc -O -L../sqllib/lib test.o -o test -ldb2

论坛徽章:
0
2 [报告]
发表于 2011-09-13 20:34 |只看该作者
本帖最后由 Law 于 2011-09-13 20:37 编辑

这是一种写法 按照以下例子:

  1.        strcpy(sql_stmt,"  insert into  ");
  2.         strcat(sql_stmt,tbname);
  3.         strcat(sql_stmt,"  values(?,?,?,?,?,?,?,?)");
  4.         EXEC SQL prepare s1 from  :sql_stmt;

  5. EXEC SQL EXECUTE s1 USING :col_c_20_1,:col_c_20_2,:col_n_1_3,:col_c_10_4,:col_c_10_5,:col_c_10_6,:col_c_10_7,:col_c_2000_8 ;

复制代码
另外一种


  1. sprintf(sSqlstmt,"insert into wh.IMEI_SERVRelation_%s \
  2.                           select   * from %s ",sNcycle,sTable2);


  3. printf("%s\n",sSqlstmt);
  4. EXEC SQL EXECUTE IMMEDIATE  :sSqlstmt;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP