qq_29801913
qq_29801913
采纳率25%
2017-02-07 09:27

oracle循环查询效率问题

我现在写了一个代码 代码中for循环,循环中有个查询语句,如果循环次数多会很慢;给大神详细解释下:

 select STAFF_ID from APP_USER_2_ROLE where ROLE_ID='4' and AREA_CODE='09'

这个查询的结果是多条记录,也是for循环的次数;

循环重要执行的sql为:

 SELECT *
        FROM (SELECT B.*, ROWNUM AS ROW_INDEX
        FROM ( SELECT
        A.CHNL_CODE,A.CHNL_NAME,A.CHNL_KIND_ID,C.KIND_VALUE,A.CHNL_ADDR_DETAIL_TOTAL,
        B.AREA_CODE,A.PROVINCE_CODE,A.CITY_CODE
        FROM TF_CHL_CHANNEL A ,
        TF_CHL_MANAGER B , T_CHL_KIND C
        <where>
            A.CHNL_ID=B.CHNL_ID AND A.CHNL_KIND_ID = C.KIND_ID
            <if test="manaStaffId != null">
                AND B.MANA_STAFF_ID = '${manaStaffId}'
            </if>
            <if test="areaCode != null">
                AND B.AREA_CODE = '${areaCode}'
            </if>
            <if test="chnlKindId != null">
                and A.CHNL_KIND_ID in (${chnlKindId})
            </if>
            AND A.STATE IN ('10','11','12')
        </where>
        ) B ) where row_index > ${minRowNum} and row_index &lt;= ${maxRowNum}

求大神指教 oracle有没有办法把这两个sql弄到一起变成一个oracle内部循环,求大神帮忙写下 感谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • NcFire niulity 4年前

    不太清楚关联条件,可以用标量子查询
    SELECT (select STAFF_ID from APP_USER_2_ROLE where ROLE_ID='4' and AREA_CODE=B.AREA_CODE AND ROWNUM = 1) STAFF_ID,
    A.CHNL_CODE,A.CHNL_NAME,A.CHNL_KIND_ID,C.KIND_VALUE,A.CHNL_ADDR_DETAIL_TOTAL,
    B.AREA_CODE,A.PROVINCE_CODE,A.CITY_CODE
    FROM TF_CHL_CHANNEL A ,
    TF_CHL_MANAGER B , T_CHL_KIND C

    点赞 1 评论 复制链接分享
  • m0_37144584 roc_tootwo 4年前

    方法一:使用存储过程。
    方法二:不循环,换个思路,直接将两个sql连接,直接查出所有结果

    点赞 评论 复制链接分享

相关推荐