问题描述
我们正在进行性能调整,下面的程序需要时间,请指导我们进一步调整或者我们可以编写任何其他方法来提高性能,
CREATE OR REPLACE TYPE "RECO_FE" FORCE AS OBJECT
(
o_o_id VARCHAR2(18 CHAR),
o_gl_no VARCHAR2(35 CHAR),
o_p_key VARCHAR2(5 CHAR),
o_p_name VARCHAR2(35 CHAR),
o_c_b_sum NUMBER(18,3),
o_d_b_sum NUMBER(18,3),
o_o_b_sum NUMBER(18,3),
o_c_sum NUMBER(18,3),
o_d_sum NUMBER(18,3),
o_de_sum NUMBER(18,3)
);
/
CREATE OR REPLACE TYPE "RECO_FI_COL" FORCE AS TABLE OF RECO_FE;
/
CREATE OR REPLACE PROCEDURE TA_RE_FILE
(
pi_id IN VARCHAR2,
pi_no IN NUMBER,
pi_reco_coll OUT RECO_FI_COL
)
IS
V_OBJ_RECONCI RECO_FI_COL;
V_OBJ_RECO_COLL RECO_FI_COL:= RECO_FI_COL();
BEGIN
SELECT RECO_FE(EX_TA_O_ID,TA_g_AC_CRDT, TA_pr_key, TA_pr_na, SUM(TA_CR_BA_LOC),NULL, NULL, NULL, NULL, NULL)BULK COLLECT INTO V_OBJ_RECONCI
FROM TA_no_AC
WHERE FK_TARB_BANK_REPORT_ID=pi_no
AND EX_TA_O_ID=pi_id
AND TA_g_AC_CRDT IS NOT NULL
GROUP BY EX_TA_O_ID, TA_g_AC_CRDT, TA_pr_key, TA_pr_na;
V_OBJ_RECO_COLL := V_OBJ_RECO_COLL MULTISET UNION V_OBJ_RECONCI;
SELECT RECO_FE(EX_TA_O_ID,TANA_GL_ACCT_DBT, TA_pr_key, TA_pr_na,NULL, SUM(TA_DE_BA_LOC), NULL, NULL, NULL, NULL) BULK COLLECT INTO V_OBJ_RECONCI
FROM TA_no_AC
WHERE FK_TARB_BANK_REPORT_ID=pi_no
AND EX_TA_O_ID=pi_id
AND TANA_GL_ACCT_DBT IS NOT NULL
GROUP BY EX_TA_O_ID, TANA_GL_ACCT_DBT, TA_pr_key, TA_pr_na;
V_OBJ_RECO_COLL := V_OBJ_RECO_COLL MULTISET UNION V_OBJ_RECONCI;
SELECT RECO_FE(EX_TA_O_ID, TANA_GL_ACCT_OVERDRFT,TA_pr_key, TA_pr_na, NULL,NULL, SUM(TA_OVE_BAL_LOC), NULL, NULL, NULL)BULK COLLECT INTO V_OBJ_RECONCI
FROM TA_no_AC
WHERE FK_TARB_BANK_REPORT_ID=pi_no
AND EX_TA_O_ID=pi_id
AND TANA_GL_ACCT_OVERDRFT IS NOT NULL
GROUP BY EX_TA_O_ID, TANA_GL_ACCT_OVERDRFT, TA_pr_key, TA_pr_na;
V_OBJ_RECO_COLL := V_OBJ_RECO_COLL MULTISET UNION V_OBJ_RECONCI;
pi_reco_coll := V_OBJ_RECO_COLL;
END;
专家解答
你已经几乎相同的查询运行了三次。然后在PL/SQL中统一结果。
你不能有一个SQL语句将这些合并在一起吗?
为了让我们提供更有意义的帮助,我们需要查看具体发生了什么以及需要多长时间的详细信息。即执行 (不解释!) 您的SQL计划,PL/SQL的运行时间等。
要获取计划,请跟踪您的会话并运行您的代码。然后解析跟踪文件。您可以在以下位置找到有关如何执行此操作的说明:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan#tkprof
可能还值得对PL/SQL进行分析,以查看这些多集联合是否需要花费时间。请在以下位置阅读:
https://oracle-base.com/articles/11g/plsql-hierarchical-profiler-11gr1
你不能有一个SQL语句将这些合并在一起吗?
为了让我们提供更有意义的帮助,我们需要查看具体发生了什么以及需要多长时间的详细信息。即执行 (不解释!) 您的SQL计划,PL/SQL的运行时间等。
要获取计划,请跟踪您的会话并运行您的代码。然后解析跟踪文件。您可以在以下位置找到有关如何执行此操作的说明:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan#tkprof
可能还值得对PL/SQL进行分析,以查看这些多集联合是否需要花费时间。请在以下位置阅读:
https://oracle-base.com/articles/11g/plsql-hierarchical-profiler-11gr1
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




