sql >> Databasteknik >  >> RDS >> Oracle

Oracle-motsvarighet till java System.currentTimeMillis()?

Java-funktionen returnerar antalet millisekunder som har förflutit sedan ett fastställt ögonblick. Den tiden är midnatt den första dagen av 1970 UTC, det vill säga början av Unix-klockan.

Följande funktion gör samma sak för PL/SQL. Den subtraherar den aktuella tidsstämpeln från startpunkten (där ms=1). Den extraherar de olika tidskomponenterna och förvandlar dem till sekunder. Slutligen multiplicerar den allt med 1000 för att få värdet i millisekunder:

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;
/

Om du har Java aktiverat i databasen kan det vara enklare att skapa en lagrad Java-procedur istället:

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

Jämförelse av de två metoderna:

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>

(Mitt tack går till Simon Nickerson, som upptäckte stavfelet i den tidigare versionen av min PL/SQL-funktion som gav ett onormalt resultat.)

För övrigt, om du bara är intresserad av tid till närmaste centisecond, har Oracle en inbyggd för det:DBMS_UTILITY.GET_TIME() .



  1. SQLAlchemy, Psychopg2 och Postgresql COPY

  2. Hanterar innoDB dödläge

  3. En översikt över PostgreSQL 13 libpq sslpassword anslutningsparametrar

  4. Hur man ställer in MariaDB 10.3-replikering med Ansible och Vagrant