SQL>create or replace and compile java source named "MyTimestamp" as import java.lang.String; import java.sql.Timestamp;public class MyTimestamp { public static String getTimestamp() { return(new Timestamp(System.currentTimeMillis())).toString(); } };SQL>java created. 注:注意java的语法,注意大小写SQL>create or replace function my_timestamp return varchar2 as language java name 'MyTimestamp.getTimestamp() return java.lang.String'; /SQL>function created.SQL>select my_timestamp,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') ORACLE_TIME from dual;MY_TIMESTAMP ORACLE_TIME ------------------------ ------------------- 2003-03-17 19:15:59.688 2003-03-17 19:15:59
谢谢各位的解答,真令人打开眼界。 在结贴之前总结一下: 要计算时间精确到1/100秒,在8i以前没有办法 在8i或更高版本中可以用dbms_utility.get_time,或select * from v$timer; 在9i中要得到精确到毫秒的时间直接用“TimeStamp”类型变量: declare cur_time timestamp; begin cur_time:=current_timestamp; dbms_output.put_line(to_char(cur_time)); end; 如果只有8i版本,就要按penitent(只取一瓢) 的方法自己建立一个java过程先。
这样做没有丝毫意义,只是一个假象而已
你可以载后面写2n个s,但只是ss的重复而已
如果你是8i,写一个下的java过程即可,很简单,就象你自己的函数一样
如果是9i,就可以直接得到毫秒
我记得显示很精确的,不知道满足要求嘛
数据库版本是8i,应该怎样写那一个java过程?
能不能再顺便说说在9i中的做法?
谢谢!to pumawang(快乐小林):
我试了你的方法,很好用 :)
在9i中,增加了TIMESTAMP类型,可取得毫秒信息。to_char(sysdate,'YYYY-MM-DD HH:MI:ssss')
这里的'ssss'指的是从午夜0点开始,到现在所经历的秒数,不是毫秒信息。
我在 cmd 中连接 Oracle 的。 'ssss' 只能得到 象'1414','5151' 那样的数字, 确实不是真正的毫秒.不过 'sssss' 奇数个s 后就是 0 点后过去秒数的.
cur_time timestamp;
begin
cur_time:=current_timestamp;
dbms_output.put_line(to_char(cur_time));
end;
8i下:
select * from v$timer;
试试看
但是要1/1000秒,还是用java函数好。
我现在忙,晚上给你一个例子。用java函数取得1/1000秒。
注意的是,你的数据库必须支持java(8i以上,并保证是企业或个人版,保证安装了java引擎)
java source
named "MyTimestamp"
as
import java.lang.String;
import java.sql.Timestamp;public class MyTimestamp
{
public static String getTimestamp()
{
return(new Timestamp(System.currentTimeMillis())).toString();
}
};SQL>java created.
注:注意java的语法,注意大小写SQL>create or replace function my_timestamp return varchar2
as language java
name 'MyTimestamp.getTimestamp() return java.lang.String';
/SQL>function created.SQL>select my_timestamp,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') ORACLE_TIME from dual;MY_TIMESTAMP ORACLE_TIME
------------------------ -------------------
2003-03-17 19:15:59.688 2003-03-17 19:15:59
在结贴之前总结一下:
要计算时间精确到1/100秒,在8i以前没有办法
在8i或更高版本中可以用dbms_utility.get_time,或select * from v$timer;
在9i中要得到精确到毫秒的时间直接用“TimeStamp”类型变量:
declare
cur_time timestamp;
begin
cur_time:=current_timestamp;
dbms_output.put_line(to_char(cur_time));
end;
如果只有8i版本,就要按penitent(只取一瓢) 的方法自己建立一个java过程先。