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

Dapatkan Waktu Lokal Saat Ini dari Setiap Negara di PL/SQL

Biasanya kami melakukan Google untuk memeriksa waktu lokal saat ini di negara mana pun. Dalam posting ini saya memberikan contoh, bagaimana Anda bisa mendapatkan waktu lokal saat ini dari negara mana pun di PL/SQL. Anda bisa mendapatkan daftar nama negara melalui V$TIMEZONE_NAMES lihat di Oracle. Saya menggunakan tampilan kamus ini untuk mendapatkan nama negara dan menggunakan fungsi TZ_OFFSET untuk mendapatkan nilai zona waktu untuk negara tertentu.

Setelah mendapatkan nama negara dan nilai zona waktu, Anda dapat menggunakan perintah Alter Session untuk mengatur zona waktu sesi saat ini. Setelah itu Anda bisa mendapatkan Current_Timestamp untuk mendapatkan waktu lokal saat ini di negara tersebut . Di bawah ini saya berikan contoh langkah demi langkah.

Pertama, kueri tampilan V$TIMEZONE_NAMES menggunakan fungsi TZ_OFFSET untuk memeriksa nama negara dan zona waktunya, seperti yang ditunjukkan pada contoh di bawah ini:

 SELECT DISTINCT tzname, TZ_OFFSET (tzname)
 FROM V$TIMEZONE_NAMES
ORDER BY tzname;

Anda akan mendapatkan sekitar 577 baris seperti di bawah ini:

America/Mexico_City -05:00 
America/Miquelon -02:00 
America/Moncton -03:00 
America/Monterrey -05:00 
America/Montevideo -03:00 
America/Montreal -04:00 
America/Montserrat -04:00 
America/Nassau -04:00 
America/New_York -04:00

Sekarang jika Anda ingin tahu jam berapa saat ini di New York. Kemudian Anda menjalankan perintah Alter Session berikut dengan nilai Timezone New York, yaitu -04:00. Seperti yang ditunjukkan di bawah ini:

ALTER SESSION SET time_zone = '-04:00';

Kemudian query seperti di bawah ini untuk mendapatkan waktu lokal saat ini untuk New York.

SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') c_time
 FROM DUAL;
C_TIME 
--------------------------------
13-jun-2017 04:26:10 AM 
1 row selected.

Setelah itu Anda harus mengatur zona waktu ke lokal. Jalankan perintah Alter Session berikut untuk mengembalikan zona waktu:

ALTER SESSION SET time_zone = LOCAL;

Sekarang jika Anda akan menanyakan seperti di atas, Anda akan mendapatkan waktu lokal saat ini di negara Anda.

Saya telah membuat fungsi tersimpan juga di PL/SQL untuk mendapatkan waktu lokal negara mana pun dengan memberikan nama negara sebagai parameter. Namun nama negara parameter harus dari daftar nama negara di tampilan V$TIMEZONE_NAMES. Di bawah ini adalah fungsinya:

CREATE OR REPLACE FUNCTION get_current_local_time (country_name IN VARCHAR2)
 RETURN VARCHAR2
IS
 CURSOR c_tz (p_country_name IN VARCHAR2)
 IS
 SELECT DISTINCT tzname, TZ_OFFSET (tzname) z_offset 
 FROM V$TIMEZONE_NAMES
 WHERE UPPER (tzname) = UPPER (p_country_name) AND ROWNUM = 1;

v_offset VARCHAR2 (100);
 vtime VARCHAR2 (100);
BEGIN
 FOR c IN c_tz (country_name)
 LOOP
 v_offset := c.z_offset;
 END LOOP;

EXECUTE IMMEDIATE 'Alter Session Set time_zone = '
 || CHR (39)
 || v_offset
 || CHR (39);

SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM')
 INTO vtime
 FROM DUAL;

/* restore local time for current session*/
 EXECUTE IMMEDIATE 'Alter Session Set time_zone = local';

RETURN (vtime);
EXCEPTION
 WHEN OTHERS
 THEN
 RETURN '';
END;
/

Sekarang gunakan seperti yang ditunjukkan di bawah ini:

SELECT get_current_local_time ('America/New_York') FROM DUAL;
C_TIME 
--------------------------------------------------------
13-jun-2017 04:33:05 AM 
1 row selected.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cek Tanggal Valid di Oracle

  2. Bagaimana menemukan baris yang terkunci di Oracle

  3. Perbedaan antara klausa ON dan WHERE dalam tabel SQL bergabung

  4. Bagaimana cara mendapatkan tipe data kolom di Oracle dengan PL-SQL dengan hak istimewa rendah?

  5. Bagaimana cara memanggil prosedur tersimpan Oracle dari skrip Excel VBA?