जावा फ़ंक्शन मिलीसेकंड की संख्या देता है जो एक निश्चित समय के बाद से बीत चुके हैं। वह समय 1970 यूटीसी के पहले दिन की मध्यरात्रि है, यानी यूनिक्स घड़ी के समय की शुरुआत।
निम्न कार्य PL/SQL के लिए समान है। यह वर्तमान टाइमस्टैम्प को प्रारंभिक बिंदु (जहाँ ms=1) से घटाता है। यह विभिन्न समय घटकों को निकालता है और उन्हें सेकंड में बदल देता है। अंत में यह मिलीसेकंड में मान प्राप्त करने के लिए हर चीज को 1000 से गुणा करता है:
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;
/
यदि आपके पास डेटाबेस में जावा सक्षम है तो आपको इसके बजाय जावा संग्रहित प्रक्रिया बनाना आसान लग सकता है:
create or replace function currentTimeMillis return number as
language java name 'java.lang.System.currentTimeMillis() return java.lang.Integer';
/
दो दृष्टिकोणों की तुलना:
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>
(मेरा धन्यवाद साइमन निकर्सन को जाता है, जिन्होंने मेरे पीएल/एसक्यूएल फ़ंक्शन के पिछले संस्करण में टाइपो को देखा, जिसने एक विषम परिणाम उत्पन्न किया।)
संयोग से, यदि आप केवल निकटतम सेंटीसेकंड के समय में रुचि रखते हैं, तो Oracle में इसके लिए एक अंतर्निहित है:DBMS_UTILITY.GET_TIME() .