如何在oracle sql的WHERE in子句中传递变量?
嗨 我有一个变量$1,它包含逗号分隔的电子邮件地址,如john@example.com,pat@example.com . 我希望在where子句中传递此变量,如如何在oracle sql的WHERE in子句中传递变量?,sql,oracle,string,where-clause,Sql,Oracle,String,Where Clause,嗨 我有一个变量$1,它包含逗号分隔的电子邮件地址,如john@example.com,pat@example.com . 我希望在where子句中传递此变量,如 where myColumn in ($1) 但很明显这是行不通的,我尝试了APEX_UTIL.STRING_TO_TABLE和DBMS_UTILITY.逗号_TO_TABLE,但没有成功 感谢您的帮助。正如Pavanred所提到的,最简单的方法——尽管不一定是最好的——是自己插值。您不会说您的呼叫语言是什么,但会说: sql =
where myColumn in ($1)
但很明显这是行不通的,我尝试了APEX_UTIL.STRING_TO_TABLE和DBMS_UTILITY.逗号_TO_TABLE,但没有成功
感谢您的帮助。正如Pavanred所提到的,最简单的方法——尽管不一定是最好的——是自己插值。您不会说您的呼叫语言是什么,但会说:
sql = "SELECT something FROM whatever WHERE myColumn in (" + $1 + ")"
但是,这意味着您必须预先检查$1中的所有值,以确保它们是数字或正确转义的字符串,或者您需要传递但不能是用户提供的原始值的任何其他值,以避免SQL注入
另一个选择是将其分为两步。首先,将$1中的值插入临时表,然后选择这些值作为子查询:
WHERE myColumn in (SELECT temp_value FROM temp_table)
这并不漂亮,但您可以实现像这样的100%一步SQL注入式解决方案。将条件CTE插入到查询中,该查询将逗号指定的列表解析为一个表。然后,您可以在in查询中使用它,如“从条件中选择项目”中的where列:
一个简单的解决方法,在您的情况下可能已经足够好了,但是没有性能,就是使用LIKE:
select * from something where $1 like '%,'||mycolumn||',%';
$1是以逗号分隔的列表,作为字符串,前面加逗号,后面加逗号,例如
,foo@bar.com,ammoq@ammoq.com,onemore@whatever.com,
尝试使用SELECT$1中的where myColumn我认为第一个选项的语法不正确,我使用的是Oracle 9iWell,您仍然没有给出实际的示例代码,也没有告诉我们您使用的是什么语言。我的答案是伪代码。
,foo@bar.com,ammoq@ammoq.com,onemore@whatever.com,