我需要一些针对我的游标的建议,这些建议预计将针对数百万条记录运行。这是我的光标查询。
CURSOR items_cursor IS -- Brings only records that need to be updated
SELECT a.*, b.* FROM
( SELECT DataId, Name, VersionNum, OwnerId, SubType, LEVEL Lev FROM DTree
START WITH ParentId = startFrom CONNECT BY PRIOR DataId= ABS(ParentId) -- Brings ABS of ParentId
)a,
(
SELECT o.DataId pDataId, o.Permissions OwnerPerm, p.Permissions PublicPerm FROM DTreeAcl o, DTreeAcl p WHERE
o.DataId=p.Dataid AND o.AclType=1 AND p.AclType=3 AND (o.Permissions != ownerPerm OR p.Permissions != publicPerm)
)b
WHERE a.Lev >= 1 AND a.Lev <= 3 AND a.DataId = b.pDataId;
从第一个游标中的另一个游标中获取第二个表中的数据比连接第一个游标本身中的所有内容更好吗??
答案 0 :(得分:3)
构建数据库以加入。在绝大多数情况下,最好让数据库在SQL中进行连接,而不是尝试在PL / SQL中编写自己的连接。
如果你知道你想要一个嵌套的循环连接并且Oracle优化器选择效率低得多的计划,那么你最好不要在PL / SQL中编写连接。但是,在这种情况下,您最好让优化器为您提供所需的计划,而不是在PL / SQL中编写嵌套循环连接。