Quantcast
Channel: dBforums – Everything on Databases, Design, Developers and Administrators
Viewing all articles
Browse latest Browse all 13329

Query Optimization required

$
0
0
A ref type cursor is created in a procedure; select query used is defined below. Please help to reduce the execution time of this query.

OPEN arm_cure_acct_collectables_cv FOR
SELECT /*+ rule */ AC.account_no,
d_null,
d_null,
d_null,
SUM(CB.balance_due + CB.dispute_amt) balance,
AC.tracking_id,
AC.tracking_id_serv,
AC.ext_event_id,
AC.ext_event_type,
AC.collectable_id,
AC.collectable_serv,
C.currency_code
FROM CMF_BALANCE CB,
CMF C,
ARM_COLLECTABLE AC,
BH_ARM_THRESH_PARAMETERS BATP
WHERE CB.account_no = C.account_no
AND (CB.bill_ref_no = 0 OR
--CB.ppdd_date <= dateadd('day', 0 - BATP.grace_period, TRUNC(SYSDATE)))
CB.PPDD_DATE <= (TRUNC(SYSDATE)-BATP.GRACE_PERIOD))
AND AC.account_no = C.account_no
AND AC.account_no > 0
AND (( C.collection_indicator =1 AND AC.apn_tracking_id IS NULL) OR (C.collection_indicator =0 AND AC.apn_tracking_id IS NOT NULL))
AND BATP.BUSINESS_UNIT = (SELECT BU.PARAM_VALUE
FROM CMF_EXT_DATA BU
WHERE BU.ACCOUNT_NO = C.ACCOUNT_NO
AND BU.PARAM_ID = v_business_unit)
AND BATP.CUSTOMER_TYPE = (SELECT CT.PARAM_VALUE
FROM CMF_EXT_DATA CT
WHERE CT.ACCOUNT_NO = C.ACCOUNT_NO
AND CT.PARAM_ID = v_customer_type)
AND (BATP.CUSTOMER_CLASSIFICATION = (SELECT CC.PARAM_VALUE
FROM CMF_EXT_DATA CC
WHERE CC.ACCOUNT_NO = C.ACCOUNT_NO
AND CC.PARAM_ID = v_customer_class)
OR BATP.CUSTOMER_CLASSIFICATION IS NULL)
AND (BATP.PRODUCT_TYPE = (SELECT PT.PARAM_VALUE
FROM CMF_EXT_DATA PT
WHERE PT.ACCOUNT_NO = C.ACCOUNT_NO
AND PT.PARAM_ID = v_product_type)
OR BATP.PRODUCT_TYPE IS NULL)
AND (BATP.CREDIT_SCORE = (SELECT CS.PARAM_VALUE
FROM CMF_EXT_DATA CS
WHERE CS.ACCOUNT_NO = C.ACCOUNT_NO
AND CS.PARAM_ID = v_credit_score)
OR BATP.CREDIT_SCORE IS NULL)
AND BATP.CURRENCY_CODE = C.CURRENCY_CODE
AND (BATP.MKT_CODE = C.MKT_CODE OR BATP.MKT_CODE IS NULL)
AND (BATP.ACCOUNT_CATEGORY = C.ACCOUNT_CATEGORY OR BATP.ACCOUNT_CATEGORY IS NULL)
AND (BATP.VIP_CODE = C.VIP_CODE OR BATP.VIP_CODE IS NULL)
GROUP BY AC.account_no, C.currency_code, C.account_status,AC.tracking_id,
AC.collectable_id,AC.tracking_id_serv, AC.ext_event_id,AC.ext_event_type,
AC.collectable_serv,exit_thresh_amt,BATP.exit_thre sh_pct
HAVING (SUM(CB.balance_due + CB.dispute_amt) <= (GREATEST(BATP.exit_thresh_amt,
BATP.exit_thresh_pct * (SELECT ED.param_value
FROM CMF_EXT_DATA ED
WHERE ED.account_no = AC.account_no AND
ED.param_id = v_col_enter_bal /*ID of Col_Enter_Bal*/ )/100 ))
AND C.account_status < 1) OR (SUM(CB.balance_due + CB.dispute_amt) <= 0 AND C.account_status > 0);

Viewing all articles
Browse latest Browse all 13329

Trending Articles