如果我的第一个查询返回null值,那么我的第二个查询必须运行,即使第二个查询是null然后我的默认值显示

时间:2011-12-01 12:10:40

标签: oracle stored-procedures plsql oracle10g plsqldeveloper

在一个过程中,如果我的第一个查询返回空值或没有返回记录,那么我的第二个查询必须运行,即使第二个查询返回空值或者不返回任何记录,则必须返回默认值。如何制作这个程序?我应该使用if else语句还是异常处理程序?

2 个答案:

答案 0 :(得分:2)

这样做的一种方法是嵌套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是常规业务逻辑的一部分,而不是需要处理的异常。我不认为在异常处理程序中嵌套后续选择几乎就像业务规则一样。

答案 1 :(得分:0)

像这样编写你的查询

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