适用数据更新,比如通过视图计算出来的数据更新到数据表中,
实际应用场景为: 通过视图进行数据处理,每次访问数据视图,响应时间非常长,把计算的出来的数据更新到表中,然后访问表数据,提高响应速度。
create or replace procedure INSERT_SAPMID_MM_MSEG is
begin
MERGE INTO SAPMID_T_MM_MSEG AA --此处填写要更新的表明
USING ( --括号内未每次更新的数据
select (T.MJAHR || T.MBLNR || T.ZEILE) AS ZKEY,
T.MANDT,
T.MBLNR,
T.MJAHR,
T.ZEILE,
M.BTEXT, --移动类型描述
SYSDATE AS UP_TIME
from MSEG@SAPMID t
LEFT JOIN T156T@SAPMID M
ON M.SPRAS = '1'
AND T.BWART = M.BWART
LEFT JOIN MBEW@SAPMID N
ON N.MATNR = T.MATNR AND N.BWKEY ='XZ01' AND N.BWTAR =' '
where T.WERKS = 'XZ01'
AND TO_CHAR(T.CPUDT_MKPF || ' ' || T.CPUTM_MKPF) >
TO_CHAR(SYSDATE - 8 / 24, 'YYYYMMDD HHMISS') --通过时间来检索要更新的数据,此表达式标识更新最近8个小时的数据
) BB
ON (AA.ZKEY = BB.ZKEY) --表要设置唯一值用来检查是否已经存在表中,接下来会做 如果存在表中,则更新,如果不在表中,则进行插入
WHEN MATCHED THEN
UPDATE
SET AA.MANDT = BB.MANDT,
AA.MBLNR = BB.MBLNR,
AA.MJAHR = BB.MJAHR,
AA.ZEILE = BB.ZEILE,
AA.BTEXT = BB.BTEXT,
AA.UP_TIME = BB.UP_TIME
WHEN NOT MATCHED THEN
INSERT
VALUES
(BB.ZKEY,
BB.MANDT,
BB.MBLNR,
BB.MJAHR,
BB.ZEILE,
BB.BTEXT,
BB.UP_TIME);
COMMIT WORK;
end INSERT_SAPMID_MM_MSEG;