我明白了
"ORA-01841: (full) year must be between -4713 and +9999, and not be
0."
随机的日历数据。
我运行以下查询:
insert into TEMP_TBL
SELECT COUNT(ea.employee_rk) AS no_logins,
ea.country_cd,
ea.nsb_department,
ea.employee_id,
NULL,
NULL
FROM EMPLOYEE_ACTIVITY ea
JOIN employee_activity_ded ead
ON ead.employee_act_ver_sk=ea.employee_act_ver_sk
JOIN employee_start_end ese
ON ese.employee_id = ea.employee_sk
AND ea.ACTIVITY_DT>=ese.START_REV
AND ea.ACTIVITY_DT
WHERE TRUNC(ea.ACTIVITY_DT) BETWEEN to_date('01-AUG-2017','DD-MON-YYYY HH24:MI:SS') AND to_date('31-AUG-2017','DD-MON-YYYY HH24:MI:SS');
DESC TEMP_TBL;
VALUE_SEC NUMBER
COUNTRY_CD VARCHAR2(50 BYTE)
NSB_DEPARTMENT VARCHAR2(50 BYTE)
EMPLOYEE_RK VARCHAR2(32 BYTE)
ACCESS_DAY DATE
ACCESS_TIME DATE
DESC employee_start_end;
EMPLOYEE_VERSION_SK NUMBER(20,0)
EMPLOYEE_SK NUMBER(20,0)
START_REV DATE
END_REV DATE
EMPLOYEE_ID VARCHAR2(32 BYTE)EMPLOYEE_ACTIVITY的列数很多,但重要的是:
ea.ACTIVITY_DT DATE此错误发生在表中的随机数据上。奇怪的是,当我将TO_DATE添加到ese.START_REV和ese.END_REV时,错误不再出现。
ese.START_REV和ese.END_REV均具有DATE作为数据类型。
在添加TO_DATE之后,相同的查询无错地运行:
insert into TEMP_TBL
SELECT COUNT(ea.employee_rk) AS no_logins,
ea.country_cd,
ea.nsb_department,
ea.employee_id,
NULL,
NULL
FROM EMPLOYEE_ACTIVITY ea
JOIN employee_activity_ded ead
ON ead.employee_act_ver_sk=ea.employee_act_ver_sk
JOIN employee_start_end ese
ON ese.employee_id = ea.employee_sk
AND ea.ACTIVITY_DT>=to_date(ese.START_REV)
AND ea.ACTIVITY_DT
WHERE TRUNC(ea.ACTIVITY_DT) BETWEEN to_date('01-AUG-2017','DD-MON-YYYY HH24:MI:SS') AND to_date('31-AUG-2017','DD-MON-YYYY HH24:MI:SS');