有没有办法根据查询结果触发oracle查询

时间:2014-07-02 03:48:42

标签: oracle11g

有没有办法根据查询结果触发oracle查询。 例如:从abc中选择*,其中col1 =' 123',如果上述查询未返回结果,则更改col1 =' abc'单一查询

谢谢, 侯赛因

2 个答案:

答案 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>

从效率的角度来看,当然,在两次操作中执行此操作可能更有效,而不是每次都读取“标准”行并进行排序。