No_Data_found исключение в оракуле - PullRequest
1 голос
/ 13 октября 2019

У меня есть две таблицы базы данных (account и account1). Я хочу ввести номер учетной записи и сначала проверить, находится ли номер учетной записи в таблице учетных записей или нет. Если его нет в таблице учетных записей, то вызовите исключение и проверьтетаблица account1. код работает для этого. но если я хочу показать сообщение об ошибке, если номер учетной записи также не найден в таблице account1, то что мне делать. вот моя часть кода -

BEGIN
begin
select Balance,Cid
    into cur_balance,cl_id
    from Account 
    where Accno = x;
    select max(Tid) into id from(select Tid from trnsaction union select Tid from trnsaction1);
    id:=id+1;
    ac_branch := 'mirpur';
exception
    when no_data_found then
    select Balance,Cid
    into cur_balance,cl_id
    from account1
    where accno = x;

    select max(Tid) into id from(select Tid from trnsaction union select Tid from trnsaction1);
    id:=id+1;

    ac_branch := 'gulshan';         

end;

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Вы можете использовать

raise_application_error(-20001,'None of the tables contain this account !'); или

dbms_output.put_line('None of the tables contain this account !');

в последнем возбужденном операторе исключения дляAccount таблицы:

DECLARE
  cur_balance  Account.Balance%type;
  cl_id        Account.Cid%type;
  id           trnsaction.Tid%type;
BEGIN
  begin
        select Balance, Cid
          into cur_balance, cl_id
          from Account
         where Accno = x;

        ac_branch := 'mirpur';
    exception
      when no_data_found then
        select Balance, Cid
          into cur_balance, cl_id
          from Account1
         where accno = x;

      ac_branch := 'gulshan'; 

        exception
          when no_data_found then 
            raise_application_error(-20001,'None of the tables contain this account !');           
  end;     

  begin
      select max(Tid)
        into id
        from (select Tid
                from trnsaction
              union
              select Tid from trnsaction1);
      id := id + 1;

     exception
       when no_data_found then null;           
  end;    
END;

, где типы столбцов Account против Account1 и trnsaction1 против trnsaction таблиц считаются идентичными относительно.

Если вы предпочитаете использовать dbms_output.put_line, перед этим введите команду set serveroutput on.

Кстати, нет необходимости повторять другой запрос, который не зависит от наших заинтересованных запросов.

0 голосов
/ 14 октября 2019

Почему бы не union all и row_number?

begin
Select Balance,Cid, branch
into cur_balance,cl_id, ac_branch
from
(Select Balance,Cid, branch
       row_number() 
       Over (order by seq) as rn
From   
(select Balance,Cid, 1 as seq, 'mirpur' as branch
    from Account 
    where Accno = x
Union all
select Balance,Cid, 2 as seq, 'gulshan' as branch
    from account1
    where accno = x))
Where rn = 1;
    select max(Tid) into id from(select Tid from trnsaction union select Tid from trnsaction1);
    id:=id+1;
exception
    when no_data_found then
    Null; -- or dbms_output.put_line('acct not found');
end;
/

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...