我在主表对象(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---------------------------
当您尝试
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;