有一个带有多个绑定变量的动态语句,其中在多个位置使用相同的变量。动态陈述也将根据条件而变化。所以绑定变量的顺序会有所不同
如何绑定特定名称的所有变量?例如。所有:company_id
引用一个值,所有:date_from
引用一个值,所有:date_to
引用一个值。
SELECT emp_no
FROM company_tab
WHERE company_id = :company_id
AND :template_id IS NOT NULL
AND :date_from IS NOT NULL
AND :date_to IS NOT NULL
AND emp_no in
(SELECT DISTINCT a.emp_no
FROM tab1 t, tab2 a, tab3 w
WHERE t.company_id = :company_id
AND t.template_id = :template_id
AND w.company_id = t.company_id
AND w.param_id = t.param_id
AND a.company_id = t.company_id
AND a.param_id = t.param_id
AND GREATEST(a.date_from, :date_from) >= :date_from
AND a.date_from <= :date_to
AND NVL(a.date_to, :date_to) >= :date_from
UNION
SELECT distinct a.emp_no
FROM tab1 t, tab4 a, tab5 d
WHERE t.company_id = :company_id
AND t.template_id = :template_id
AND t.company_id = a.company_id
AND t.param_id = a.param_id
AND d.company_id = a.company_id
AND a.data_deriv_day BETWEEN :date_from AND :date_to)
我希望在不使用REPLACE函数和使用USING语句的情况下完成此操作。
答案 0 :(得分:3)
使用with
子句首先绑定变量...
with bind_val as (
select
:company_id company_id,
:template_id template_id,
:date_from date_from,
:date_to date_to
from dual
)
SELECT
emp_no
FROM company_tab t
join bind_val b
on t.company_id = b.company_id
where b.template_id IS NOT NULL
AND b.date_from IS NOT NULL
AND b.date_to IS NOT NULL
AND t.emp_no in (
SELECT
DISTINCT a.emp_no
FROM tab1 t
join bind_val c
on t.company_id = c.company_id
AND t.template_id = c.template_id
join tab3 w
on w.company_id = t.company_id
AND w.param_id = t.param_id
join tab2 a
on a.company_id = t.company_id
AND a.param_id = t.param_id
where GREATEST(a.date_from, c.date_from) >= c.date_from
AND a.date_from <= c.date_to
AND NVL(a.date_to, c.date_to) >= c.date_from
union all
......
)
现在你只有4个绑定变量,可以多次使用。
注意: -
希望使用join
代替,
来加入表格。