有没有办法根据查询结果触发oracle查询。 例如:从abc中选择*,其中col1 =' 123',如果上述查询未返回结果,则更改col1 =' abc'单一查询
谢谢, 侯赛因
答案 0 :(得分:0)
可以使用PL / SQL
CREATE OR REPLACE Procedure insert_if_null(p_find IN varchar2)
as
v_count number;
BEGIN
select count(*)
into v_count
from table
where col1 = p_find;
if v_count = 0 then -- means no data found while using your filter
update table
set col1 = p_find;
end if;
END;
此过程中的参数取决于您计划添加的过滤器数量以及过滤update statement.
答案 1 :(得分:0)
听起来你想要像
这样的东西select *
from (select a.*,
rank() over (order by (case when col1 = 'standard'
then 2
else 1
end)) rnk
from abc a
where col1 in ('123', 'standard'))
where rnk = 1
如果abc
中有col1
值为“123”的行,则该行的rnk
为1并将返回。如果没有abc
行,则col1
值为“standard”的行将rnk
为1(因为它将是唯一的行)并将返回。< / p>
从效率的角度来看,当然,在两次操作中执行此操作可能更有效,而不是每次都读取“标准”行并进行排序。