oracle union 排序

今天在写存储过程的时候用到了with  as 选出两个结果集作为临时表,但是想要得到结果得查询两个临时表两次。由于使用with as 目的是将遍历打表操作只做一次,所以就想用union将两次查询变成一个结果,但这两个结果出现的顺序会影响到后续的业务判断。以前一直没有注意到union或union all的结果集是乱序的,只知道union会去重。好了废话不多说直接上代码:

with smp_fw as (...),
a4_fw as (...)
 select wmsys.wm_concat(count_num)

    into count_result

    from (select count(1) count_num, 1 flag

          from smp_fw

         where smp_fw.address not in (select address from a4_fw)

        union

        select count(1) count_num, 2 flag

          from a4_fw

         where a4_fw.address not in (select address from smp_fw)

         order by flag);

  if count_result <> '0,0' then

    result := 'smp资产与4a资产防火墙数目不相等,smp,4a多出的防护墙数量为' || count_result;

    return;

  end if;

当然实现这个功能应该还有多种方法。等有机会一定好好请教一下临厂的dba。o(︶︿︶)o 唉我开始一直想要成为dba的男人!

发表评论

电子邮件地址不会被公开。 必填项已用*标注