我有一个记录表
CREATE TABLE EMAIL_LOGGING
(
ID NUMBER(9) NOT NULL,
SEND_DATE TIMESTAMP(6) DEFAULT LOCALTIMESTAMP NOT NULL,
SEND_TO_USER_ID NUMBER(9) NOT NULL);
和一个用这个片段插入其中的包:
INSERT INTO EMAIL_LOGGING ("ID",SEND_DATE, SEND_TO_USER_ID)
VALUES (NULL, LOCALTIMESTAMP,send_to_user_in);
当从一个包中的 DBMS_JOB 调用它时,它会插入格林威治标准时间。当从另一个使用 db_link 到另一个数据库的包的 DBMS_JOB 调用它时,它会正确插入本地时间。
我认为这是由正在使用的客户端时区引起的,但是将其添加到作业中并没有解决它:
execute immediate 'alter session set time_zone=local';
当然,最好的解决方案是移至 DBMS_Scheduler,但在此之前如何确保插入的时间戳是本地时间?
select * from v$version where banner like 'Oracle%';
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
SELECT DBTIMEZONE FROM DUAL;
+00:00
SELECT SESSIONTIMEZONE from dual;
-04:00
我通过设置此属性解决了这个问题
并将作业移至 DBMS_SCHEDULER。现在,当它运行时,在日志表中输入了正确的(本地)时间。