我有一个SQL查询,其中where子句“ MID = 123”。我想为VALUE使用参数,并传递多个值。
示例:现在我传递的是123的一个值,但是我想传递多个值,例如123, 124, 125
等,SQL查询将从中将多个值一一传递给where
子句,并逐个生成结果,例如第一次使用value = 123
时获取结果,在使用value = 124
时获取结果,最后使用value = 125
来获取结果。
我需要有关此参数的帮助。
如果我们不更改SQL查询,但可以在where子句中进行参数设置,那就太好了。
注意:我正在使用SQL Developer。
SQL查询:
SELECT
'ABC' AS COLUMN_NAME,
(CASE
WHEN to_char(count(ABC)) > 1
AND to_char(max(ABC)) = to_char(min(ABC))
AND to_char(count(ABC)) = count(*)
AND to_char(max(ABC)) IS NULL
THEN 'same'
ELSE 'Diff'
END) AS COMPARISON_VALUE,
(CASE
WHEN to_char(COUNT(ABC)) = 1 OR to_char(min(ABC)) IS NULL
THEN 'No Values'
ELSE to_char(max(ABC))
END) AS TRANSACTION1,
to_char(min(ABC)) AS TRANSACTION2
FROM
ADVICES
WHERE
MID = '123';
答案 0 :(得分:0)
您可以将where子句更改为-
WHERE
MID IN (YOUR_PARAMETER);
当您传递多个值时,它将简单地转换为OR
条件并获取结果。
答案 1 :(得分:0)
一种方法是在WITH子句中指定测试数据,然后通过外部联接将其提供给查询。我们将测试值作为结果集中的第一列。这意味着结果集中的每一行都将具有关联的测试值。
WITH testdata(testval) AS
(
SELECT '123' FROM DUAL UNION ALL
SELECT '124' FROM DUAL UNION ALL
SELECT '125' FROM DUAL
)
SELECT
testdata.testval,
...
...
FROM
ADVICES, testdata
WHERE
MID (+) = testdata.testval;
...我正在尝试参数where子句,我想为其获取 来自文本或CSV的参数数据应该没问题。
或者,testdata
可能是从带有测试值的CSV文件加载的表。
答案 2 :(得分:0)
您可以传递CSV并使用LIKE
。
where ','||:var||',' like '%,'||MID||',%'
使用HR模式的示例
var myvar VARCHAR2
exec :myvar := '101,102,103' --parameter
select employee_id,department_id from employees where
','||:myvar||',' like '%,'||employee_id||',%';
结果
EMPLOYEE_ID DEPARTMENT_ID
----------- -------------
101 90
102 90
103 60
答案 3 :(得分:0)
您可以像下面这样编写WHERE子句:
WHERE MID IN
(SELECT
REGEXP_SUBSTR('YOUR_VALUE', '[^,]+', 1, LEVEL)
FROM
DUAL
CONNECT BY
REGEXP_SUBSTR('YOUR_VALUE', '[^,]+', 1, LEVEL) IS NOT NULL);
用于检查解决方案:
-- With multiple values
DEFINE YOUR_VALUE= '123,124,125';
SELECT
REGEXP_SUBSTR('&YOUR_VALUE', '[^,]+', 1, LEVEL)
FROM
DUAL
CONNECT BY
REGEXP_SUBSTR('&YOUR_VALUE', '[^,]+', 1, LEVEL) IS NOT NULL);
-- OUTPUT --
REGEXP_SUBS
-----------
123
124
125
-- With single value
DEFINE YOUR_VALUE = '123';
SELECT
REGEXP_SUBSTR('&YOUR_VALUE', '[^,]+', 1, LEVEL)
FROM
DUAL
CONNECT BY
REGEXP_SUBSTR('&YOUR_VALUE', '[^,]+', 1, LEVEL) IS NOT NULL;
-- OUTPUT --
REGEXP_SUBS
-----------
123
干杯!