SYS_REFCURSOR会降低oracle的性能吗?

时间:2013-11-05 11:21:02

标签: oracle oracle11g

我有两张桌子catalogcatalog_elements.

目录可以包含许多目录元素。

我有一个功能,我需要列出与一个目录关联的所有元素以及我需要显示目录名称和目录注释的同一页面的顶部(一个目录可以包含一个注释)。

我的DBA给出了一个存储过程,其中放置内连接并选择如下记录

C.cat_name, C.cat_comment, CE.cat_ele_id, CE.cat_ele_date

   [C means catalog, CE means catalog Elements]

但我喜欢使用第二个SYS_REFCURSOR来选择目录详细信息,以避免每行中重复的目录详细信息元组

有人可以为此提出最佳解决方案(在性能方面)吗?

下面的sp有两个光标,我想向DBA提议。

(我喜欢通过使用第二个游标来获取目录数据,从select查询中删除cat_name和cat_comment)

SP代码模板如下:

create or replace
PROCEDURE SP_GET_Cat_CatEle_DTL(
          P_CATALOG_ID NUMBER DEFAULT NULL,
          P_RECORDSET  OUT SYS_REFCURSOR,
          P_CATALOG_RECORD OUT SYS_REFCURSOR
          ) AS

BEGIN
  OPEN P_RECORDSET FOR

    select cat_name, cat_comment, cat_ele_id, cat_ele_date from  cat inner join
    cat_ele on cat.id = cat_ele_id where cat.id = P_CATALOG_ID

  OPEN P_CATALOG_RECORD FOR
    SELECT * FROM CATALOG_MASTER WHERE CATALOG_ID = P_CATALOG_ID;

END SP_GET_Cat_CatEle_DTL;

1 个答案:

答案 0 :(得分:1)

在资源占用和时间消耗方面,仅使用一个光标是最佳解决方案。查询会有点复杂,但在你的情况下它应该不是问题。