扩展方法创建额外的空行

问题描述 投票:0回答:1

我在主表对象(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, tab3.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            tab3
        Name(varchar2)  LOCATION(obj)   EDUHIST(obj)    PURCHASES(obj)   
    1   Carol           Some_object                 
    2   -------------------------EMPTY ROW---------------------------
    3   -------------------------EMPTY ROW---------------------------
    4   -------------------------EMPTY ROW---------------------------
oracle function plsql nested-table
1个回答
0
投票

当您尝试

SELECT tab3.purchases
时,您的查询不起作用,但您从未加入到
tab3
表。

我假设您正在获取

NULL
值,因为您在
tab
表中有值,但在
tab1
tab2
tab3
中没有相应的值。在这种情况下,请使用
LEFT OUTER JOIN
并检查至少一列
OUTER JOIN
IS NOT NULL
:

FOR list_obj IN (
   SELECT tab.name,
          tab1.location,
          tab2.eduhist,
          tab3.purchases
   FROM   tab 
          LEFT OUTER JOIN tab1
          ON tab.name = tab1.name
          LEFT OUTER JOIN tab2
          on tab.name = tab2.name
          LEFT OUTER JOIN tab3
          on tab.name = tab3.name
   WHERE  tab1.name IS NOT NULL
   OR     tab2.name IS NOT NULL
   OR     tab3.name IS NOT NULL
)
   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;
© www.soinside.com 2019 - 2024. All rights reserved.