1

我正在研究informix-4gl。我的程序即将从一个表添加和更新用户信息到多个表。如果用户提供的信息包含“'”符号或单引号,例如购买者姓名或用户地址.我的问题是当我更新表格时,包含单引号符号的信息不会更新。现在我发现必须有一个双引号才能输入不同在线服务器中的值。现在,我要将单引号更改为双引号。我曾尝试更改这样的代码,但它只读取单引号。

          LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)    
  FOR a = 1 TO rmks_lgth                          
    IF p_crsell.crse_purc_nme[a] = "'" THEN       
     LET p_crsell.crse_purc_nme[a] = "''"        
   END IF                                        
  END FOR              

我曾尝试更改代码以生成双引号。对于包含“'”引号符号的每个输入,引号必须加倍。

    LET rmks_lgth = LENGTH(p_crsell.crse_purc_nme)    
  FOR a = 1 TO rmks_lgth 
  FOR b = 1 TO rmks_lgth                         
    IF p_crsell.crse_purc_nme[a] = "'" THEN       
     LET p_crsell.crse_purc_nme[a] = "'"  
     LET p_crsell.crse_purc_nme[b] = "'"      
   END IF                                        
  END FOR        
  END FOR      

上面的代码只会产生输出

''

没有其他值的地方。有人叫 ceinmark 建议“我需要创建一个 4GL 函数来找到引号,然后在找到它的位置将字符串一分为二,并将“新”引号与字符串的这两个部分连接起来。”

4

1 回答 1

1

Rahim,下面的解决方案仅适用于 4GL 代码,不适用于 Informix SQL 语句。这可以很容易地重写为 Informix 存储过程(但我知道作为 SP,这不会解决您的问题):

MAIN
  DEFINE p_sql varCHAR(200)
  DEFINE p_dest varCHAR(200)
  DEFINE i,x,z INTEGER

  LET p_sql = arg_val(1)

  LET x=1
  LET p_dest=''
  FOR i = 1 TO length(p_sql)
    IF p_sql[i,i] = '"' THEN
      LET p_dest=p_dest,p_sql[x,i],'"'
      LET x=i+1
    END IF
  END FOR

  LET i=length(p_sql)
  IF x < i THEN
    LET p_dest=p_dest,p_sql[x,i]
  END IF

  DISPLAY p_sql
  DISPLAY p_dest
END MAIN

测试结果:

$ fglgo x "test 'one' "
test 'one'
test 'one'

$ fglgo x 'test "one" '
test "one"
test ""one""

$ fglgo x 'test "one"'
test "one"
test ""one""

$ fglgo x 'test "one" x'
test "one" x
test ""one"" x
于 2013-10-25T10:59:19.833 回答