ITPub博客

首页 > 数据库 > 数据库开发技术 > informix的esql编译参数避免//注释引起的SQL中断问题

informix的esql编译参数避免//注释引起的SQL中断问题

原创 数据库开发技术 作者:pacman2000 时间:2017-05-12 00:07:02 0 删除 编辑

在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

$


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/283313/viewspace-2138940/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
从事银行核心系统设计开发的程序员

注册时间:2010-03-16

  • 博文量
    44
  • 访问量
    74232