0

我需要一些关于我的游标的建议,预计会针对数百万条记录运行。这是我的光标查询。

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;

在第一个游标内的另一个游标中从第二个表中获取数据比在第一个游标本身中加入所有内容更好吗?

4

1 回答 1

3

建立一个数据库来加入。在绝大多数情况下,最好让数据库在 SQL 中进行连接,而不是尝试在 PL/SQL 中编写自己的连接。

最好在 PL/SQL 中编写联接的唯一方法是,如果您知道需要嵌套循环联接并且 Oracle 优化器选择了效率低得多的计划。但是,在这种情况下,最好让优化器为您提供所需的计划,而不是在 PL/SQL 中编写嵌套循环连接。

于 2013-04-11T17:08:50.630 回答