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

Oracle setara dengan java System.currentTimeMillis()?

Fungsi Java mengembalikan jumlah milidetik yang telah berlalu sejak momen tertentu dalam waktu. Waktu itu adalah tengah malam pada hari pertama tahun 1970 UTC, yaitu awal dari waktu jam Unix.

Fungsi berikut melakukan hal yang sama untuk PL/SQL. Ini mengurangi stempel waktu saat ini dari titik awal (di mana ms=1). Ini mengekstrak berbagai komponen waktu dan mengubahnya menjadi detik. Akhirnya ia mengalikan semuanya dengan 1000 untuk mendapatkan nilai dalam milidetik:

create or replace function current_millisecs 
    return number 
is
    base_point constant timestamp := to_timestamp('01-JAN-1970 00:00:00.000');
    now constant timestamp := systimestamp AT TIME ZONE 'UTC' ;
begin
    return (
                  ((extract(day    from (now-base_point)))*86400)
                + ((extract(hour   from (now-base_point)))*3600)
                + ((extract(minute from (now-base_point)))*60)
                + ((extract(second from (now-base_point))))
           ) * 1000;
end;
/

Jika Anda mengaktifkan Java di database, Anda mungkin merasa lebih mudah untuk membuat Java Stored Procedure sebagai gantinya:

create or replace function currentTimeMillis return number as
language java name 'java.lang.System.currentTimeMillis() return java.lang.Integer';
/

Perbandingan dua pendekatan:

SQL> select currentTimeMillis as JAVA
  2         , current_millisecs as PLSQL
  3         , currentTimeMillis - current_millisecs as DIFF
  4  from dual
  5  /

      JAVA      PLSQL       DIFF
---------- ---------- ----------
1.2738E+12 1.2738E+12          0

SQL>

(Terima kasih saya sampaikan kepada Simon Nickerson, yang menemukan kesalahan ketik di versi sebelumnya dari fungsi PL/SQL saya yang menghasilkan hasil yang tidak wajar.)

Kebetulan, jika Anda hanya tertarik pada waktu hingga centisecond terdekat, Oracle memiliki bawaan untuk itu:DBMS_UTILITY.GET_TIME() .



  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 Memasukkan Stempel Waktu di Oracle dalam Format Tertentu

  2. Masalah menggunakan/menampilkan karakter khusus dari Oracle db di .Net app

  3. Apakah saya perlu membuat indeks pada kunci asing di Oracle?

  4. kueri untuk menemukan semua kolom dalam tabel tanpa nilai di dalamnya

  5. 4 Contoh Blok Anonim PL/SQL