если мой первый запрос возвращает нулевое значение, тогда мой второй запрос должен выполняться, даже если второй запрос является нулевым, тогда мое значение по умолчанию, как показано - PullRequest
0 голосов
/ 01 декабря 2011

В процедуре, если мой первый запрос возвращает нулевое значение или не возвращает записей, тогда мой второй запрос должен выполняться, даже если второй запрос возвращает нулевое значение или не возвращает записей, тогда должно возвращаться значение по умолчанию.как сделать эту процедуру?я должен использовать если еще оператор или обработчик исключений?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Один из способов сделать это - вставить вложенные операторы IF, что-то вроде этого:

create or replace function get_queue_id 
    (p_product_code in mo_product_master.product_code%type
     , p_intermediary_code in intrfc_intermediary_mstr_view.intermediary_code%type)
    return mo_product_master.queue_id%type
as
    return_value number;
begin
    -- preferred_choice 
    begin
        select pm.queue_id 
        into return_value
        from mo_product_master pm 
        where pm.product_code=p_product_code
    exception
        when no_data_found then
            null;
    end;

    if return_value is null then
        -- second_choice 
        begin
            select qim.queue_id 
            into return_value
            from mo_queue_inter_map_master qim
                , intrfc_intermediary_mstr_view imv 
            where qim.category_code =imv.category_code 
            and imv.intermediary_code=p_intermediary_code;
        exception
            when no_data_found then
                null;
        end;

        if return_value is null then
            -- default_value 
            select id 
            into return_value
            from mo_queue_master 
            where queue_name='others' 
            and status='Active';
        end if;
    end if;
    return return_value;
end;
/

Это немного неуклюже, но делает свою работу.

Подавление исключения NO_DATA_FOUND обычно не рекомендуется, но я думаю, что оно подходит для этого сценария: не обнаружение первого QUEUE_ID является частью обычной бизнес-логики, а не исключением, которое необходимо обработать.Я не думаю, что вложение последующих выборок в обработчик исключений почти так же выразительно, как бизнес-правила.

0 голосов
/ 01 декабря 2011

напишите ваш запрос как этот

select * from tablename 
  where field1 in nvl(select field1 from table2 ,'defaultvalue')
...