sql >> Database teknologi >  >> RDS >> Oracle

Oracle-ækvivalent til java System.currentTimeMillis()?

Java-funktionen returnerer antallet af millisekunder, der er forløbet siden et bestemt tidspunkt. Det tidspunkt er midnat den første dag i 1970 UTC, dvs. starten på Unix-uret.

Følgende funktion gør det samme for PL/SQL. Det trækker det aktuelle tidsstempel fra startpunktet (hvor ms=1). Den udtrækker de forskellige tidskomponenter og forvandler dem til sekunder. Til sidst ganges alt med 1000 for at få værdien 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;
/

Hvis du har Java aktiveret i databasen, vil du måske finde det nemmere at oprette en Java Stored Procedure i stedet:

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

Sammenligning af de to tilgange:

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>

(Min tak går til Simon Nickerson, som opdagede tastefejlen i den tidligere version af min PL/SQL-funktion, hvilket gav et unormalt resultat.)

Hvis du i øvrigt kun er interesseret i tid til nærmeste centisecond, har Oracle en indbygget til det:DBMS_UTILITY.GET_TIME() .



  1. Hvordan importerer man en csv-fil til MySQL workbench?

  2. Gem databaserække-id i session til senere brug

  3. Understøttelse af flere sprog i 11i/R12

  4. SQL SELECT med m:n relation