代码之家  ›  专栏  ›  技术社区  ›  BFF

创建其他空行的Extend方法

  •  0
  • BFF  · 技术社区  · 2 年前

    我在一个主表对象(mastertbl)上使用.extend并循环,这样它就可以从3个不同的临时表(具有不同的对象数据类型cols)中获取对象。我注意到它正在创建空行,例如,只有1个表有数据,其他2个表没有。所以当我返回mastertbl时,它有3个空行。如何防止它添加空行?

       For list_obj in (select coalesce(tab.name,tab1.name,tab2.name) name, 
        tab1.location location, tab2.eduhist eduhist, tab.purchases purchases
        from tab full join tab1 on tab1.name = tab.name
         full join tab2 on tab2.name = tab1.name)
       Loop var_comp.extend;
       n := n+1
       var_listc(n) := mastertbl(list_obj.name, list_obj.location, list_obj.eduhist, list_obj.purchases)
       End loop;
    

    输出

                                 tab1            tab2            tab
            Name(varchar2)  LOCATION(obj)   EDUHIST(obj)    PURCHASES(obj)   
        1   Carol           Some_object                 
        2   -------------------------EMPTY ROW---------------------------
        3   -------------------------EMPTY ROW---------------------------
        4   -------------------------EMPTY ROW---------------------------
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   MT0    2 年前

    您的查询在尝试时不起作用 SELECT tab3.purchases 但你从不加入 tab3 桌子

    我想你得到了 NULL 值,因为您在中有值 tab 表,但中没有相应的值 tab1 , tab2 表3 。或者可能是 name 在里面 表3 但中没有值 purchases 柱如果没有一些复制问题的示例数据和语法有效的查询,就很难判断。

    如果您的样本数据似乎与该情况相匹配,请检查 OUTER JOIN ed列 IS NOT NULL :

    SELECT mastertbl(
             COALESCE(tab.name, tab1.name, tab2.name),
             tab1.location,
             tab2.eduhist,
             tab.purchases
           )
    BULK COLLECT INTO var_listc
    FROM   tab 
           FULL OUTER JOIN tab1
           ON tab.name = tab1.name
           FULL OUTER JOIN tab2
           on tab.name = tab2.name
     WHERE  tab.name IS NOT NULL
     OR     tab1.name IS NOT NULL
     OR     tab2.name IS NOT NULL;