当前位置:操作系统 > Unix/Linux >>

[每日一题] 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  

 


CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,