Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle tương đương với java System.currentTimeMillis ()?

Hàm Java trả về số mili giây đã trôi qua kể từ một thời điểm cố định. Thời điểm đó là nửa đêm ngày đầu tiên của năm 1970 UTC, tức là thời gian bắt đầu của đồng hồ Unix.

Hàm sau thực hiện tương tự đối với PL / SQL. Nó trừ dấu thời gian hiện tại từ điểm bắt đầu (trong đó ms =1). Nó trích xuất các thành phần thời gian khác nhau và biến chúng thành giây. Cuối cùng, nó nhân mọi thứ với 1000 để nhận giá trị tính bằng mili giây:

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

Nếu bạn đã bật Java trong cơ sở dữ liệu, thay vào đó, bạn có thể thấy việc tạo Thủ tục lưu trữ Java đơn giản hơn:

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

So sánh hai cách tiếp cận:

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>

(Xin gửi lời cảm ơn tới Simon Nickerson, người đã phát hiện ra lỗi đánh máy trong phiên bản trước của hàm PL / SQL của tôi, tạo ra một kết quả bất thường.)

Ngẫu nhiên, nếu bạn chỉ quan tâm đến thời gian chính xác đến từng giây, Oracle có tích hợp sẵn cho điều đó: 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. Oracle UNION các cột khác nhau

  2. Giao dịch theo trình tự Oracle

  3. Khu vực phục hồi nhanh của Oracle

  4. Chế độ xem Yêu cầu Logic phụ thuộc lẫn nhau:Có thể không có MODEL?

  5. Không thể sử dụng tên cột trong truy vấn chọn lọc trên sqlfiddle (oracle)