Solución:
- Independiente de la zona horaria de DB
- con milisegundos
- funciona en XE
function current_time_ms return number is out_result number; begin select extract(day from(sys_extract_utc(systimestamp) - to_timestamp('1970-01-01', 'YYYY-MM-DD'))) * 86400000 + to_number(to_char(sys_extract_utc(systimestamp), 'SSSSSFF3')) into out_result from dual; return out_result; end current_time_ms;
Lo mejor que conozco es:
select extract(day from (systimestamp - timestamp '1970-01-01 00:00:00')) * 86400000
+ extract(hour from (systimestamp - timestamp '1970-01-01 00:00:00')) * 3600000
+ extract(minute from (systimestamp - timestamp '1970-01-01 00:00:00')) * 60000
+ extract(second from (systimestamp - timestamp '1970-01-01 00:00:00')) * 1000 unix_time
from dual;
No estoy muy seguro de qué requisitos tiene con respecto a la zona horaria. Es posible que deba hacer pequeños ajustes para eso.
Añadiendo a la respuesta de @Mykhaylo Adamovych (¡que parece correcta!), Aquí hay un enfoque más sencillo utilizando el soporte de Oracle Java (es decir, no en XE ni en AWS RDS). Menos portátil (en caso de que le importe), pero parecía más rápido en mi pruebas.
CREATE or replace FUNCTION current_java_timestamp RETURN number
AS LANGUAGE JAVA NAME 'java.lang.System.currentTimeMillis() return java.lang.Long';
/
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)