Chinaunix首页 | 论坛 | 博客
  • 博客访问: 308287
  • 博文数量: 40
  • 博客积分: 1
  • 博客等级: 民兵
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-31 11:19
个人简介

从事银行核心系统设计开发的程序猿

文章存档

2019年(1)

2018年(4)

2017年(11)

2016年(6)

2015年(18)

分类: DB2/Informix

2017-05-12 00:07:33

在EXEC SQL中,如果SQL语句出现了“//”符号,那么会导致后面一直到“;”结尾的SQL语句都被忽略,而不止当前行。这样往往会出乎程序员的意料。

例如以下例子程序t1.ec。


  1. int main()
  2. {
  3.         EXEC SQL UPDATE vyktd
  4.         SET kahaoo="1" //注释1出现在SQL中
  5.         WHERE kahaoo= "2";
  6.         //注释2出现在普通程序中
  7.         return 0;
  8. }



正常编译可以通过:

$esql -e t1.ec

$

其实执行的SQL将会是UPDATE vyktd SET kahaoo="1",不带任何条件。因为WHERE字句被注释1所掩盖,变成危险的全表更新!


为了避免这样的隐患,需要加上esql的编译参数-keepccomment,加上这个以后,如果在sql里写了“//”就会编译报错。

$esql -keepccomment -e t1.ec
esqlc: "t1.ec", line 4: Error -33051: Syntax error on identifier or symbol '/'.
1 error(s) found

$


阅读(2666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~