SQL查询-是在查询中注入的函数将由Oracle

时间:2018-10-11 12:59:07

标签: sql oracle

我想知道SQL函数extractvalue()xmltype()是否有机会在以下查询中执行,或者IN运算符是否会将它们评估为字符串值

SELECT * FROM TABLE_1 WHERE (FIELD_1 IN ('foo','bar''||(select extractvalue(xmltype(''%gxgol;]>''),''/l'') from dual)||'''))

此查询在Oracle中不会引起任何错误,并且输出仅包含FIELD_1等于'foo'的行。

2 个答案:

答案 0 :(得分:2)

否,将不执行字符串文字的内容。幸运的是。

您需要一个真正的子查询。像这样:

SELECT *
FROM TABLE_1
WHERE FIELD_1 IN (
    SELECT 'foo' FROM DUAL
    UNION ALL
    SELECT 'bar' || extractvalue(bla,bla) FROM DUAL)

答案 1 :(得分:1)

如果您通过

打电话给他们
  

立即执行

,是的,它们将被当作函数。

有关更多信息,https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems017.htm