我有一個物化視圖表,其中包含員工及其對系統的訪問信息 該表具有「effective_date」列和「effective_date_to」列,該物化視圖每晚更新一次使用case語句的oracle查詢的問題
我想添加一個額外的列「current_flag」到這個表來顯示當前員工是否有權訪問「Y」或「N」 我在考慮使用「case」聲明如下所示: -
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;
SYSDATE是Date類型,你不必做TO_DATE (sysdate) –
你得到什麼錯誤?請發佈ORA錯誤消息。 –
在已經是日期的列上使用'to_date()'是完全沒有用的(並不是說沒有意義)。 –