问题描述
你好,
昨天我使用insert all query直接从toad在两个表中输入8行。当时我用TO_DATE(SYSDATE,'dd-MON-YYYY HH24:MI') 在我的表中插入sysdate (我知道sysdate是足够的,但因为过去四个月我在Oracle Apex上工作,我习惯了这个功能 & 我输入错误)。该查询已在生产中运行。今天,我正在检查这8行,我发现 '10-03-0019 '仅在我的表中插入了该特定列 (但必须14:10 10-03-2019)。你能详细说明为什么会这样吗?
这是我的查询
昨天我使用insert all query直接从toad在两个表中输入8行。当时我用TO_DATE(SYSDATE,'dd-MON-YYYY HH24:MI') 在我的表中插入sysdate (我知道sysdate是足够的,但因为过去四个月我在Oracle Apex上工作,我习惯了这个功能 & 我输入错误)。该查询已在生产中运行。今天,我正在检查这8行,我发现 '10-03-0019 '仅在我的表中插入了该特定列 (但必须14:10 10-03-2019)。你能详细说明为什么会这样吗?
这是我的查询
INSERT ALL
INTO TABLE1
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
ENGINEER_ID,
ENGINEER_NAME,
EMPLOYEE_ID,
END_DATE)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL)
INTO TABLE1
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
ENGINEER_ID,
ENGINEER_NAME,
EMPLOYEE_ID,
END_DATE)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL)
INTO TABLE1
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
ENGINEER_ID,
ENGINEER_NAME,
EMPLOYEE_ID,
END_DATE)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL)
INTO TABLE1
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
ENGINEER_ID,
ENGINEER_NAME,
EMPLOYEE_ID,
END_DATE)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL)
INTO TABLE2
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
USER_ID,
ROLE_ID,
EMPLOYEE_ID,
CUSTOMER_ID,
VENDOR_ID)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL,
NULL
)
INTO TABLE2
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
USER_ID,
ROLE_ID,
EMPLOYEE_ID,
CUSTOMER_ID,
VENDOR_ID)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL,
NULL
)
INTO TABLE2
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
USER_ID,
ROLE_ID,
EMPLOYEE_ID,
CUSTOMER_ID,
VENDOR_ID)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL,
NULL
)
INTO TABLE2
(CREATION_DATE,
CREATED_BY,
LAST_UPDATED_DATE,
LAST_UPDATED_BY,
APPLICATION_ID,
USER_ID,
ROLE_ID,
EMPLOYEE_ID,
CUSTOMER_ID,
VENDOR_ID)
VALUES (TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
TO_DATE(SYSDATE, 'DD-MON-YYYY HH24:MI'),
,
,
,
,
,
NULL,
NULL
)
SELECT * FROM DUAL;
专家解答
你有隐式转换正在进行!
事情是,SYSDATE已经返回一个日期。所以真正发生的是:
所以不同设置的客户端会得到不同的结果:
抛弃日期。
永远不要约会!
事情是,SYSDATE已经返回一个日期。所以真正发生的是:
to_date ( to_char ( sysdate,) )
所以不同设置的客户端会得到不同的结果:
alter session set nls_date_format = 'DD-MON-YYYY HH24:MI:SS'; select to_date ( sysdate, 'DD-MON-YYYY HH24:MI:SS' ) from dual; TO_DATE(SYSDATE,'DD-MON-YYYYHH24:MI:SS') 11-MAR-2019 03:30:49 alter session set nls_date_format = 'YYYY/MM/DD'; select to_date ( sysdate, 'DD-MON-YYYY HH24:MI:SS' ) from dual; ORA-01861: literal does not match format string
抛弃日期。
永远不要约会!
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




