Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在oracle sql的WHERE in子句中传递变量?_Sql_Oracle_String_Where Clause - Fatal编程技术网

如何在oracle sql的WHERE in子句中传递变量?

如何在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 =

嗨 我有一个变量$1,它包含逗号分隔的电子邮件地址,如john@example.com,pat@example.com . 我希望在where子句中传递此变量,如

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,