У меня есть хранимая процедура ниже, и это, в основном, хранимая процедура, которая очищает таблицу в зависимости от даты обновления, теперь моя проблема в том, что моя хранимая процедура работает отлично, но как a develoer, я больше сосредоточусь на optminzing и не использую неправильную synta,Оптимизация приведенной ниже хранимой процедуры в oracle
так попросите вас, пожалуйста, посоветуйте и посоветуйте, если ниже хранится процедура. Я использую какой-либо неправильный синтаксис или как могу оптимизировать его ниже сохраненного prcedure, пожалуйста, сообщите поскольку я более убежден в оптимизации и эффективности, пожалуйста, советую.
create or replace procedure TABLE_CLEAN_UPABLE_CLEAN_UP
is
v_last_cleanup_time timestamp(6);
v_last_mv_refresh_time timestamp(6);
v_last_mv0_refresh_time timestamp(6);
outcome VARCHAR2(100);
i NUMBER := 0;
begin
Select LAST_START_DATE+LAST_RUN_DURATION into v_last_cleanup_time from USER_SCHEDULER_JOBS
where JOB_NAME='DELTA_TABLE_CLEAN_UP_JOB';
SELECT count(*) into i FROM all_mviews WHERE owner = 'XP_TM_TO' AND
mview_name in ('CASHFLOW_VIEW', 'CASHFLOW_VIEW_0') and LAST_REFRESH_TYPE='COMPLETE'
and CAST(LAST_REFRESH_DATE AS TIMESTAMP) > v_last_cleanup_time;
if i=2 then
SELECT CAST(LAST_REFRESH_DATE AS TIMESTAMP) into v_last_mv_refresh_time FROM all_mviews WHERE owner = 'XP_TM_TO' AND mview_name = 'CASHFLOW_VIEW' and LAST_REFRESH_TYPE='COMPLETE';
SELECT CAST(LAST_REFRESH_DATE AS TIMESTAMP) into v_last_mv0_refresh_time FROM all_mviews WHERE owner = 'XP_TM_TO' AND mview_name = 'CASHFLOW_VIEW_0' and LAST_REFRESH_TYPE='COMPLETE';
delete CASHFLOW_DELTA where (TRADE_ID,SOURCE_SYSTEM,TRADE_VERSION)
NOT in
(select table1.TRADE_ID,table1.SOURCE_SYSTEM,table1.TRADE_VERSION from CASHFLOW_DELTA table1
INNER JOIN (select TRADE_ID,SOURCE_SYSTEM,max(TRADE_VERSION) as MAX_TRADE_VERSION
from CASHFLOW_DELTA GROUP BY TRADE_ID, SOURCE_SYSTEM) table2
on table1.TRADE_ID=table2.TRADE_ID
where table1.SOURCE_SYSTEM=table2.SOURCE_SYSTEM
and table1.TRADE_VERSION=table2.MAX_TRADE_VERSION
and table1.BROKERAGE_REALISED='YES')
and createddate<v_last_mv_refresh_time
and createddate<v_last_mv0_refresh_time;
end if;
end;
/
Привет, я бы закрыть на 3 all_mviews до 1 запроса с футляром, когда находится в ЗЕЬЕСТЕ, то вам не нужно использовать 2 выбирает в IF – Thomas
, если его не работает нормально, то нет вопрос о некорректном синтаксисе. Oracle не позволяет выполнить неправильный код синтаксиса. :-) – XING
Томас, спасибо за ценные советы, я действительно ценю это, прошу вас, пожалуйста, показать бит, чтобы он мог схватить больше – sss