[每日一题] OCP1z0-047 :2013-08-26 TIMESTAMP WITH LOCAL TIME ZONE
[每日一题] OCP1z0-047 :2013-08-26 TIMESTAMP WITH LOCAL TIME ZONE
正确答案:C
使用TIMESTAMP WITH LOCAL TIME ZONE数据类型,用户插入数据时,oracle将会把用户的数据结合用户session的时区信息自动换算成数据库设定的时区的时间进行储存,当用户查看信息时,oracle将会把时间结合用户session的时区信息自动换算成该时区的时间。
本题数据库时区是8:00 用户时区是5:00
当用户执行INSERT INTO new_order VALUES(1, TIMESTAMP '2007-05-10 6:00:00 5:00')时,先将带时区的timestamp计算成
session时区的timestamp,然后oracle自动将时区换算成数据库的8:00时区,记为2007-05-10 3:00:00
在New York的用户查看的时候,oracle会再次自动换算到当地时间2007-05-10 6:00:00
在San Francisco的用户查看的时候,oracle会自动换算到当地时间2007-05-10 3:00:00
with local timezone显示的时候已经自动转换到session时区,所以是不会显示出时区信息的。
选项A. 在New York的用户查看记录,应该显示为2007-05-10 6:00:00
选项B. timestamp with local time zone已经根据session时区转换,所以不会再显示时区信息
选项C正确. 在San Francisco的用户查看的时候,oracle会自动换算到当地时间2007-05-10 3:00:00
选项D. timestamp with local time zone已经根据session时区转换,所以不会再显示时区信息
测试如下:
(1)、创建表 [html] gyj@OCM> CREATE TABLE new_order 2 (orderno NUMBER(4), 3 booking_date TIMESTAMP WITH LOCAL TIME ZONE); (2)插入记录 [html] gyj@OCM> INSERT INTO new_order 2 VALUES(1,TIMESTAMP '007-05-10 6:00:00 -5:00'); 1 row created. gyj@OCM> COMMIT; Commit complete. (3)查询New York where the time zone is -5:00 [html] gyj@OCM> ALTER SESSION SET TIME_ZONE='-5:00'; Session altered. gyj@OCM> select * from new_order; ORDERNO BOOKING_DATE ---------- --------------------------------------------------------------------------- 1 10-MAY-07 06.00.00.000000 AM (4)查询San Francisco where the time zone is -8:00 [html] gyj@OCM> ALTER SESSION SET TIME_ZONE='-8:00'; Session altered. ggyj@OCM> select * from new_order; ORDERNO BOOKING_DATE ---------- --------------------------------------------------------------------------- 1 10-MAY-07 03.00.00.000000 AM