ORACLE - 解码视图谓词并应用于基表

问题描述

我有一个如下定义的视图

CREATE VIEW DQ_DB.DQM_RESULT_VIEW
AS SELECT
    res.ACTIVE_FL AS ACTIVE_FL,res.VERSION as VERSION,res.rule_constituents_tx,nvl(ruletable.rule_desc,'N/A') AS rule_ds,nvl(res.effective_dt,TO_DATE('31-dec-9999','dd-mon-yyyy')) AS effective_dt,nvl(res.rule_id,'N/A') AS rule_id,res.audit_update_ts AS rule_processed_at,res.load_dt,res.vendor_group_key,nvl(res.vendor_entity_key,'N/A') AS vendor_entity_key,res.vendor_entity_producer_nm,(SELECT category_value_tx FROM dq_db.category_lookup_view WHERE category_nm = 'RESULT_STATUS_NB' AND category_value_cd = res.result_status_nb ) AS result,--catlkp.category_value_tx as result,res.entity_type,nvl(rgrp.grp_nm,'N/A') AS rule_category,nvl(ruletable.rule_nm,'N/A') AS rule_nm,Feedsumm.Feed_run_nm AS file_nm,res.application_id AS application,res.data_source_id AS datasource,res.entity_nm,res.rule_entity_effective_dt,res.result_id,dim.dimension_nm,dim.sub_dimension_nm,ruletable.execution_env AS execution_env,ruletable.ops_action AS ops_action,rulefunctiontable.func_nm AS rule_func_nm,--        nvl2(res.primary_dco_sid,dq_db.get_dco_name(res.primary_dco_sid),null) AS dco_primary,--        nvl2(res.delegate_dco_sid,dq_db.get_dco_name(res.delegate_dco_sid),null) AS dco_delegate,res.primary_dco_sid AS dco_primary,res.delegate_dco_sid AS dco_delegate,ruletable.data_concept_id AS data_concept_id,res.latest_result_fl as latest_result_fl,res.batch_execution_ts as batch_execution_ts
FROM
    dq_db.dqm_result res
        --LEFT OUTER JOIN dq_db.category_lookup_view catlkp on (catlkp.category_nm = 'RESULT_STATUS_NB' AND catlkp.category_value_cd = res.result_status_nb)
        LEFT OUTER JOIN dq_db.Feed_run_summary Feedsumm ON res.vendor_group_key = Feedsumm.batch_id
        LEFT OUTER JOIN dq_db.dqm_rule ruletable ON res.rule_id = ruletable.rule_id
        LEFT OUTER JOIN dq_db.dqm_rule_grp rgrp ON ruletable.rule_grp_id = rgrp.rule_grp_id
        LEFT OUTER JOIN dq_db.dqm_rule_function rulefunctiontable ON ruletable.func_id = rulefunctiontable.func_id
        LEFT OUTER JOIN dq_db.dq_dimension_view dim ON dim.dimension_id = ruletable.dimension_id

result 列视图是从子查询条件生成的查找值,它将代码转换为 下面。

0|PASS 1|ALERT 2|ERROR

我的 Web 应用程序向这个视图添加了一些谓词,这些谓词被推送到基表。但是由于谓词的内联性质,下面显示的视图上的一个特定谓词没有被推送。

select * from dqm_result_view where result IN ('ALERT','ERROR')

现在此查询在执行视图 JOIN 后应用过滤器,因为无法将谓词推送到 DQM_RESULT 表。

需要的是..如果我们得到那个结果谓词,那么应用代码 0,1,2 而不是在最后应用 result 谓词,以便提前过滤来自 DQM_RESULT 的 JOIN 的数据基表,从而提高性能。关于如何实现这一目标的任何想法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)