可以同时在2个表中查,用union all可以保证phone_sihu 表优先级高,phone_sihu 表没有纪录再取phone_xlt纪录:select flag into flag into o_flag from
(select flag from phone_sihu where tele=p_tele
union all
select flag from phone_xlt where tele=substr(p_tele,1,4))
where rownum = 1

解决方案 »

  1.   

    那判断一个表中是否有符合条件的记录用这语句:
         select count(1) into o_count1 from phone_sihu where tele=p_tele;
          if o_count1>0 then
           select flag into o_flag from phone_sihu where tele=p_tele;
            if o_flag=1 then 
               o_moneys:=3000;
               elsif o_flag=2 then
               o_moneys:=27900;
               elsif o_flag=3 then
               o_moneys:=900;
               elsif o_flag=6 then
               o_moneys:=900;
            end if; 
            else o_flag:=4;o_moneys:=27900;--都没有符合主叫的记录则输出类型为:呼转
          end if;
    是吗?可我总感觉这样效率很低,不知道有没有更好的办法
      

  2.   

    1.case
    when
    ...
    end ;2.decode
      

  3.   

    有點小錯誤,倒數第二個end;應為end if;
      

  4.   

    o_flag is null 是不是不对呀,该表的flag的字段值只有1或2或3或6,别的情况没有,如果选不到应该用:if flag<>o_flag then o_flag:=4; end if;吧??
      

  5.   

    ^_^关于两表连接我已经采用 duanzilin(寻) 的答复,所以看到你写的两表连接觉得有问题但没提出,只光顾着那个o_flag is null 了,呵呵,谢谢 zjp8310(z一阵风z),这次应该没有问题了,我想用 decode比用if then else效率会更高吧
      

  6.   

    晕,我回复了显示:server down^_^ 我两表连接查询已经采用了 duanzilin(寻) 回复的,所以看到你写的两表连接觉得有问题还没顾得上跟你说,就专注那个o_flag is null 了,呵呵,谢谢zjp8310(z一阵风z) 我想这次肯定没有问题了,用decode应该比用if then else 效率更高吧
      

  7.   

    我试过了,你那段还有个小错误就是:no_data_fount 不能用小写的,不然就提示没有声明,要用大写的才行。
      

  8.   

    no_data_found不区分大小写的,你写错了吧
      

  9.   

    不好意思,確實是我寫錯了,我本來測試好了的,在測試中寫成了no_data_fount,出了錯誤後我改成了no_data_found,但忘記重新復制了,然後就粘貼了測試出錯前的代碼到這裡了,真是不好意思,我的代碼應該是沒問題的了!!!!
      

  10.   

    我测试了一下,如果是两个表都没有就跳到o_flag:=4;o_moneys:=27900;执行了,并且在出错模块后面的代码例如:        if substr(p_tele,2,1) in ('0','1','9') 
             then o_flag:=2;o_moneys:=27900;            end if;
    以及下面还有很多代码都执行了,这没有问题。但假如第一个表:phone_sihu 里有记录,返回了o_flag:=2,o_moneys:=27900;之后就退出来了,显示程序执行完毕。就是说出错模块后面的代码一点都没有执行,因为我是用OOB测试的,一步一步执行的。我感觉还是有问题。
      

  11.   

    呵呵,非常感谢zjp8310(z一阵风z)对我的热情帮助,我已经从你这学到了很多东西。我的要求是不管那两个表里是否有记录(有记录就返回除了4之外的o_flag,没有记录的就返回o_flag=4),在判斷第二個字符那段代码的后面还有很多代码都要执行。所有:phone_sihu 里有记录,返回了o_flag:=2,o_moneys:=27900;之后就退出来了肯定是错的^_^,如此探讨可很有长进呀,希望以后能做更多的交流,我的QQ:365300292