Sql 使用replace替换存储过程调用中的单引号

Sql 使用replace替换存储过程调用中的单引号,sql,db2,Sql,Db2,我有一个对存储过程(db2)的调用,如果一个字符串中有一个单引号,它将被一个错误“Invalid Token”打断。我知道解决办法是将单引号替换为两个单引号。我试图使用“替换”,但得到一个错误“令牌S无效”。这就是“替换”的用法吗 CALL my_store_proc ('xyz', 'US', 'MAIL', replace('Joe's',''','''''), 'zipcode' ) 谢谢大家! 您还需要在文本中引用引号,即: CALL my_store_proc ('xyz', 'US

我有一个对存储过程(db2)的调用,如果一个字符串中有一个单引号,它将被一个错误“Invalid Token”打断。我知道解决办法是将单引号替换为两个单引号。我试图使用“替换”,但得到一个错误“令牌S无效”。这就是“替换”的用法吗

CALL my_store_proc ('xyz', 'US', 'MAIL', replace('Joe's',''','''''), 'zipcode' )

谢谢大家!

您还需要在文本中引用引号,即:

CALL my_store_proc ('xyz', 'US', 'MAIL', replace('Joe''s',''',''''') , 'zipcode' )
仅针对语法,但根据您的意图,您可能需要更多的引号:

CALL my_store_proc ('xyz', 'US', 'MAIL',  replace('Joe''s','''',''''''), 'zipcode' )

你把这个过程称为错误的

您没有提到调用存储过程的位置/方式。但是ODBC、JDBC等都有一个方法,允许您从存储过程调用的变量中设置参数值


使用其中一种方法而不是简单地构建字符串是首选的调用方法。

您可以使用'CALL my_store_proc('xyz','US','MAIL','variableForJoe$,'zipcode')?可能重复@mustaccio,但不是重复的,我正在尝试替换store过程调用中的单引号,这与你提到的问题所提出的试图逃避某个角色有点不同。不,不是。这是同一种SQL语言。问题是,值“joe’s”是由用户动态输入的,它可以是“mary’s”或任何其他带单引号的字符串,我想我可以在运行时进行筛选。@Andre你真的不想将未初始化的用户输入保留到SQL语句中;阅读有关SQL注入的内容。我明白,我在简化这里的事情,并认为“替换”可以让我的生活更轻松。我认为,如果你知道你将得到一个字符串,其中有一个单引号,“replace”就可以完成这项工作。所以SQL中没有函数可以动态地执行此操作?您能解释一下为什么对过程的调用是错误的吗?我正在使用ODBC连接Perl。