我将通过取出函数,然后在外部查询中选择这些列来包装整个不同的查询。应该减少函数调用的数量,并且这种方式的区别也应该更快。
SELECT *, pkg_sp_subbrief.get_sub_contact_parm
(a.sub_id,
'contact.name.salutation'
) salutation,
pkg_sp_subbrief.get_sub_contact_parm
(a.sub_id,
'first_name'
) first_name,
pkg_sp_subbrief.get_sub_contact_parm
(a.sub_id,
'contact.name.middle'
) middle_name,
pkg_sp_subbrief.get_sub_contact_parm
(a.sub_id,
'last_name'
) last_name,
pkg_sp_subbrief.get_sub_parm (a.sub_id, 'company_name') company_name,
pkg_sp_subbrief.get_sub_parm (a.sub_id, 'itc_account') itc_accout,
pkg_sp_subbrief.get_sub_contact_parm
(a.sub_id,
'phones.home.number'
) phone_number,
pkg_sp_subbrief.get_location_parm
(a.sub_id,
'address_1'
) addr_home_address,
pkg_sp_subbrief.get_location_parm
(a.sub_id,
'city'
) addr_home_city,
pkg_sp_subbrief.get_location_parm
(a.sub_id,
'prov'
) addr_home_prov,
pkg_sp_subbrief.get_location_parm
(a.sub_id,
'postal_cd'
) addr_home_postal_code,
pkg_sp_subbrief.get_location_parm
(a.sub_id,
'country'
) addr_home_country,\
pkg_sp_subbrief.get_subsvc_parm_first (a.sub_id,
3374
) alpha_tag,
fn_sp_get_svc_plan (a.sub_id) svc_plan,
pkg_sp_subbrief.get_sub_typ (a.sub_id) sub_type
FROM (
SELECT -- /*+ first_rows */
distinct a.sub_id, b.status,
c.svc_provider_nm,
e.val cm_mta_mac, ' ' telephone_number,
NVL (j.voipdn1, ' ') voip_dn1,
NVL (j.mtavoiceport, ' ') mta_voice_port
FROM svc_provider c,
ref_status b,
sub a,
sub_svc d,
sub_svc_parm e,
(SELECT f.sub_id, g.val voipdn1, i.val mtavoiceport
FROM sub_svc f, sub_svc_parm g, sub_svc_parm i
WHERE f.svc_id = SvcId('smp_dial_tone_access')
AND f.sub_svc_status_id ! = 29
AND f.sub_svc_id = g.sub_svc_id
AND g.parm_id = get_cgo_parm_id('voip_dn1', GET_CLASS_ID('SubSvcSpec'), SvcID('smp_dial_tone_access'))
AND f.sub_svc_id = i.sub_svc_id
AND i.parm_id = 20410) j
WHERE a.svc_provider_id = c.svc_provider_id
AND a.sub_status_id = b.status_id
AND a.sub_id = d.sub_id
AND d.sub_svc_id = e.sub_svc_id
AND (e.parm_id = 1254 OR e.parm_id = 20249)
AND d.sub_svc_status_id != 29
AND a.sub_status_id != 9
AND a.sub_id = j.sub_id(+)
)