Oracle增強型日期函數

來源:互聯網
上載者:User

Oracle增強型日期函數

--修改資料庫時區為東八區

ALTER DATABASE SET TIME_ZONE='+08:00';

/*

在修改過程中可能會出現錯誤提示:ORA-30079: 當資料庫有TIMESTAMP WITH LOCAL TIMEZONE列時不能變更資料庫時區

這是因為當前資料庫中已有的表中存在列,列的類型定義為了TIMESTAMP WITH LOCAL TIME ZONE

所以資料庫不允許修改資料庫時區

接下來需要通過語句找到是哪些表的列引起的這個問題,查詢語句如下:

**/

--檢查是否有影響修改時區的欄位存在

SELECT u.name || '.' || o.name || '.' || c.name TSLTZcolumn

  FROMsys.obj$ o, sys.col$ c, sys.user$ u

 WHERE c.type# = 231

  AND o.obj# = c.obj#

  AND u.user# = o.owner#;

--刪除影響欄位所在的表

DROP TABLE OE.ORDERS;

--如果提示有外鍵引用影響,可以考慮清楚列上資料後,更改資料類型為TIMESTAMP(6)

ALTER TABLE oe.orders  MODIFY  oe.orders.order_date (TIMESTAMP(6));

--建議清楚資源回收筒

PURGE RECYCLEBIN;

--SQLPLUS命令視窗執行重啟資料庫操作

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

--重新串連會話,查詢資料庫時區是否可以更改

ALTER DATABASESE TTIME_ZONE='+08:00';

--更改成功後,查詢是否是東八區,即:+08:00

SELECT DBTIMEZONE FROM DUAL;

--修改本次會話時區的4種方式

SQL> ALTER SESSION SET TIME_ZONE = local;

SQL> ALTER SESSION SET TIME_ZONE = dbtimezone;

SQL> ALTER SESSION SET TIME_ZONE = '+08:00';

SQL> ALTER SESSION SET TIME_ZONE = 'Europe/London';

--查詢會話時區

SELECT SESSION TIMEZONE FROM DUAL;

--查詢當前資料庫所在伺服器系統時間

SELECT SYSDATE FROM DUAL

/*

3種不同類型的時間戳記

普通的時間戳記:TIMESTAMP,預設經度保留小數點後6位,最大經度是9位

資料庫中設定的時間戳記:TIMESTAMP WITH TIME ZONE

當前作業系統所在時區的時間戳記:TIMESTAMP WITH LOCAL TIME ZONE

**/

--建立一張暫存資料表,定義3列時間,類型分別是上面3種類型

CREATE TABLE word_time

(currtime TIMESTAMP,

 dbtime TIMESTAMP WITH TIME ZONE,

 local_time TIMESTAMP WITH LOCAL TIME ZONE);

 --將sysdate插入word_time表中的三列,查看區別

 INSERT INTO word_time VALUES(SYSDATE,SYSDATE,SYSDATE);

--查詢表word_time,觀察三列顯示的區別

SELECT * FROM word_time;

/*

說明:

1、通過檢索表word_time,我們可以看見DBTIME列比較特殊,多出了 +08:00,這個表示我們事前已經設定的時區——東8區;

2、LOCAL_TIME與DBTIME的區別是,取的是資料庫伺服器所在作業系統的時區時間,與作業系統時區保持一致,

    當作業系統時區改變時,需要重啟資料庫才會生效

**/

--TZ_OFFSET函數用於計算0時區與指定時區的小時、分鐘間隔

SELECT TZ_OFFSET('Asia/Chongqing') FROM DUAL;

--動態視圖查詢時區資訊

 SELECT * FROM v$timezone_names stWHERE st.TZNAME LIKE'Asia%';

--查詢當前會話所在時區的時間,DATE類型,精度精確到秒

SELECT CURRENT_DATE FROM DUAL;

--顯示結果是TIMESTAMP類型,包含時區,精度預設保留6位,最多9位

SELECT CURRENT_TIMESTAMP FROM DUAL;

--顯示結果是TIMESTAMP類型,格式類似TIME STAMP WITH LOCAL TIME ZONE

SELECT LOCALTIMESTAMP FROM DUAL;

Oracle 單一實例 從32位 遷移到 64位 方法 

在CentOS 6.4下安裝Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虛擬機器中安裝步驟

Debian 下 安裝 Oracle 11g XE R2

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.