Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

4 Cara Mengubah Zona Waktu di Oracle

Di Oracle Database, zona waktu dapat diatur di berbagai tempat. Berikut adalah empat cara untuk mengubah zona waktu saat menggunakan Oracle.

Setel Zona Waktu Basis Data

Anda dapat mengatur zona waktu database saat membuat database. Untuk melakukannya, gunakan SET TIME_ZONE klausa dari CREATE DATABASE pernyataan.

Contoh:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Dalam hal ini, saya menggunakan nama wilayah zona waktu. Lihat Cara Mengembalikan Daftar Zona Waktu yang Valid di Oracle Database untuk mendapatkan daftar lengkap nama wilayah yang valid di sistem Anda.

Atau, Anda dapat menggunakan offset zona waktu aktual:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';

Jika Anda tidak secara eksplisit menyetel zona waktu saat membuat database, maka zona waktu default sistem operasi server.

Anda juga dapat mengubah pengaturan zona waktu saat ini untuk database. Untuk melakukannya, gunakan ALTER DATABASE pernyataan.

Contoh:

ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Perhatikan bahwa zona waktu basis data hanya relevan untuk TIMESTAMP WITH LOCAL TIME ZONE kolom. Selain itu, Oracle menyarankan agar Anda mengatur zona waktu database ke UTC (0:00) untuk menghindari konversi data dan meningkatkan kinerja saat data ditransfer antar database.

Setel Zona Waktu Sesi

Anda dapat mengatur zona waktu sesi secara independen ke zona waktu database. Saat Anda mengembalikan TIMESTAMP WITH LOCAL TIME ZONE data, itu dikembalikan dalam zona waktu sesi saat ini.

Zona waktu sesi juga berlaku saat TIMESTAMP nilai dikonversi ke TIMESTAMP WITH TIME ZONE atau TIMESTAMP WITH LOCAL TIME ZONE tipe data.

Anda dapat melakukan beberapa hal untuk menyetel zona waktu pada tingkat sesi.

Tdia ORA_SDTZ Variabel Lingkungan

Anda dapat mengatur zona waktu sesi dengan ORA_SDTZ variabel lingkungan. Ini dapat diatur ke nilai berikut:

  • Zona waktu lokal sistem operasi ('OS_TZ' )
  • Zona waktu basis data ('DB_TZ' )
  • Offset mutlak dari UTC (mis.'-04:00' )
  • Nama wilayah zona waktu (mis. 'America/St_Kitts' )

Berikut adalah beberapa contoh pengaturan variabel lingkungan ini di lingkungan UNIX:

% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'

Nilai default ORA_SDTZ variabelnya adalah 'OD_TZ' . Nilai ini digunakan ketika variabel tidak disetel atau disetel ke nilai yang tidak valid.

ALTER SESSION Pernyataan

Anda dapat mengubah zona waktu untuk sesi SQL tertentu dengan SET TIME_ZONE klausa dari ALTER SESSION pernyataan.

TIME_ZONE dapat diatur ke nilai berikut:

  • Zona waktu lokal default saat sesi dimulai (local )
  • Zona waktu basis data (dbtimezone )
  • Offset mutlak dari UTC (mis. '-04:00' )
  • Nama wilayah zona waktu (mis. 'Canada/Eastern' )

Berikut contoh pengaturan TIME_ZONE ke nilai-nilai seperti itu:

ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';

Anda dapat memeriksa zona waktu sesi Anda saat ini dengan SESSIONTIMEZONE fungsi.

Contoh:

SELECT SESSIONTIMEZONE FROM DUAL;

Hasil:

Australia/Brisbane 

Dalam kasus saya, zona waktu sesi diatur ke Australia/Brisbane.

AT TIME ZONE Klausa

Ekspresi datetime dapat menyertakan AT LOCAL klausa atau AT TIME ZONE ayat. Jika Anda menyertakan AT LOCAL klausa, maka hasilnya dikembalikan dalam zona waktu sesi saat ini. Jika Anda menyertakan AT TIME ZONE klausa, maka zona waktu dapat berupa salah satu dari berikut ini:

  • Offset zona waktu
  • Nama wilayah zona waktu
  • DBTIMEZONE (fungsi ini mengembalikan zona waktu database)
  • SESSIONTIMEZONE (fungsi ini mengembalikan zona waktu sesi saat ini)
  • Ekspresi yang mengembalikan string karakter dengan format zona waktu yang valid.

Contoh:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT TIME ZONE '+12:00'
FROM DUAL;

Hasil:

02/JAN/30 04:30:35.000000000 AM +12:00

Dalam hal ini saya menggunakan FROM_TZ() berfungsi untuk mengonversi nilai stempel waktu dan zona waktu menjadi TIMESTAMP WITH TIME ZONE nilai. Saya kemudian menggunakan AT TIME ZONE klausa untuk menentukan zona waktu yang berbeda.

Ini contoh yang sama, kecuali kali ini saya tentukan AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Hasil:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara meneruskan variabel dari skrip shell ke sqlplus

  2. Jalankan Oracle Client dalam mode 32-bit pada mesin 64-bit

  3. SQL*Plus bagaimana cara menerima variabel teks dari prompt?

  4. Mengaktifkan TLS di Oracle Apps R12.2

  5. Di mana karakter saya yang tidak valid (ORA-00911)