小编典典

如何在Oracle SQL的WHERE IN子句中传递变量?

sql

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

where myColumn in ($1)

但是显然这行不通,我尝试了APEX_UTIL.STRING_TO_TABLE和DBMS_UTILITY.COMMA_TO_TABLE但徒劳。

任何帮助表示赞赏。


阅读 190

收藏
2021-03-23

共1个答案

小编典典

正如Pavanred所暗示的那样,最简单的方法(虽然不一定是最好的方法)是自己内插值。您没有说出呼叫语言是什么,而是类似:

sql = "SELECT something FROM whatever WHERE myColumn in (" + $1 + ")"

但是,这意味着非常重要的一点是,您必须预先检查$
1中的所有值,以确保它们是数字或正确的转义字符串,或者您需要传递但不能为a所提供的原始值的任何其他值用户,以避免SQL注入。

另一个选择是使其分为两个步骤。首先,将$ 1中的值插入到临时表中,然后选择这些值作为子查询:

WHERE myColumn in (SELECT temp_value FROM temp_table)
2021-03-23