従業員とその従業員のシステムへのアクセスに関する情報を含むマテリアライズド ビュー テーブルがあります。テーブルには「effective_date」列と「effective_date_to」列があります。このマテリアライズド ビューは毎晩 1 回更新されます。
このテーブルに「current_flag」列を追加して、現在の従業員がアクセス権を持っているかどうかを「Y」または「N」で示したいと思います。次のような「ケース」ステートメントを使用することを考えています:-
CASE WHEN to_date(c.effective_date) < to_date(sysdate)
and to_date (effective_date_to) > to_date(sysdate)
THEN 'Y'
ELSE 'N'
END) AS current_flag
これが最善の方法ですか?そうであれば、これを機能させるのに苦労しているため、正しい構文は何ですか..
元のマテリアライズド ビュー テーブルは以下のとおりです...
CREATE MATERIALIZED VIEW TC.employee_access
(
EMPL_ID,
EFFECTIVE_DATE,
EFFECTIVE_DATE_TO,
DEPARTMENT,
JOB_DESCRIPTION,
TIME_STAMP,
MODIFIED_BY
)
TABLESPACE TC_TC_DATA
PCTUSED 0
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
NEXT 1M
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOCACHE
LOGGING
NOCOMPRESS
NOPARALLEL
BUILD IMMEDIATE
REFRESH FORCE
START WITH TO_DATE('16-Jan-2013','dd-mon-yyyy')
NEXT TRUNC(SYSDATE+1)
WITH PRIMARY KEY
AS
SELECT C.EMPL_ID AS Empl_Id,
C.EFFECTIVE_DT AS Effective_Date,
DECODE (n.effective_dt,
c.effective_dt, TO_DATE ('01/01/2099', 'DD/MM/YYYY'),
n.effective_dt - 1)
AS Effective_Date_To,
C.DFLT_UDT06_ID AS Department,
C.DFLT_UDT08_ID AS Job_Description,
C.TIME_STAMP,
C.MODIFIED_BY
FROM empl_history_mv c, empl_history_mv n
WHERE n.effective_dt =
(SELECT NVL (MIN (effective_dt), c.effective_dt)
FROM empl_history_mv
WHERE empl_id = c.empl_id AND effective_dt > c.effective_dt)
AND c.empl_id = n.empl_id;