【发布时间】:2018-12-27 20:08:37
【问题描述】:
我在将字符串传递给将在 IN 子句中使用该字符串的函数时遇到问题。
字符串如下所示:
OracleParameter p = new OracleParameter("'ABC','EEE','DDD','FFF'", val, OracleDbType.VarChar2, ParameterDirection.Input);
PL/SQL 函数中的IN 子句是这样的:
sqlString := 'WHERE SomeCd IN (' || in_Codes || ')'
所以当函数执行时,你会得到这个子句:
WHERE someCd IN ('ABC','EEE','DDD','FFF')
问题是,我无法在我的 IDE 中真正测试它,因为为了传递它,我必须使用转义序列来转义单引号。这导致字符串看起来像这样:
-
'''ABC'',''EEE'',''DDD'',''FFF'''被解析为
''ABC'',''EEE'',''DDD'',''FFF'' -
q'['ABC','EEE','DDD','FFF']'作为
q'['ABC','EEE','DDD','FFF']'发送给函数。
这些都不能正常工作,因为字符串的格式现在是错误的。
如何以正确的格式将此列表传递给函数?我必须使用 varray 还是什么?
编辑:
一般的问题是:当我在转义的一对单引号 '''' 中转义单引号 '' 时,转义的单引号 '' 也被传递给函数。
【问题讨论】:
-
首先不要将 SQL 查询构造为字符串。这是非常不安全的。
-
@Servy 它不是在 C# 端构造为
string。刚刚作为VARCHAR2传递给PL/SQL 函数。 -
它们会以这种方式出现在 Run PL/SQL 窗口中,但它显示的是 SQL*Developer 动态创建的包装器代码。您的实际功能将收到正确的值。我在 SQL*Developer 17.4 上对此进行了测试。如果您没有得到相同的结果,我建议您更新您的问题,并提供更多详细信息,可能还包括屏幕截图。