楼主: bfc99

[SQL] 【已解决】如何获取timestamp类型的精度到纳秒级

[复制链接]
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
21#
 楼主| 发表于 2015-7-28 16:56 | 只看该作者
oracle_cj 发表于 2015-7-28 16:05
我连工具都传上来吧

好消息是:这个工具不错,加密的东东也可以看到了。
坏消息是:找到的get_time的函数定义是:
   FUNCTION GET_TIME RETURN NUMBER IS
  BEGIN
    RETURN ICD_GET_TIME;
  END;

而ICD_GET_TIME的相关定义是:
FUNCTION ICD_GET_TIME RETURN BINARY_INTEGER;
    PRAGMA INTERFACE (C, ICD_GET_TIME);

NND,完全看不懂啊。

使用道具 举报

回复
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
22#
 楼主| 发表于 2015-7-28 16:57 | 只看该作者
2009532140 发表于 2015-7-28 16:03
感觉那段是硬编码,没暴露出来...
估计的上更高大上的工具了....

好象是这样的。解密后,看不懂啊。

使用道具 举报

回复
论坛徽章:
737
季节之章:春
日期:2015-07-31 17:16:29ITPUB季度 技术新星
日期:2014-07-17 14:37:00季节之章:秋
日期:2015-07-31 17:16:14季节之章:夏
日期:2015-07-31 17:16:29股神
日期:2014-10-15 09:23:31衰神
日期:2014-10-20 22:47:12季节之章:冬
日期:2015-07-31 17:16:14红钻
日期:2014-12-16 17:51:41洛杉矶湖人
日期:2016-09-23 08:18:15布鲁克林篮网
日期:2016-09-23 08:17:18
23#
发表于 2015-7-28 17:00 | 只看该作者
把你当前方案拿出来大伙看看,说不定有大神有更好的解决办法,你就不用折腾这玩意儿了啊

使用道具 举报

回复
论坛徽章:
24
2010年世界杯参赛球队:韩国
日期:2009-12-20 20:11:33天枰座
日期:2015-07-18 17:23:54托尼托尼·乔巴
日期:2017-01-25 09:38:19秀才
日期:2017-03-02 10:30:14秀才
日期:2017-03-02 10:30:35秀才
日期:2017-06-29 10:16:48技术图书徽章
日期:2017-07-11 09:10:26乌索普
日期:2023-01-05 23:01:5220周年集字徽章-年	
日期:2021-05-27 09:37:50蒙奇·D·路飞
日期:2022-10-27 21:49:38
24#
发表于 2015-7-28 17:04 | 只看该作者
systimestamp是从OS级别获取的,oracle应该只精确到microsecond. 这个不用想进一步取nanosecond了,换个思路吧,从你描述看是要唯一,即使取到了纳秒,如果os的时间不稳定,万一被调后了几秒,照样出问题. 为啥不建个sequence,或者用guid呢?

使用道具 举报

回复
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
25#
 楼主| 发表于 2015-7-28 17:09 | 只看该作者
oracle_cj 发表于 2015-7-28 17:00
把你当前方案拿出来大伙看看,说不定有大神有更好的解决办法,你就不用折腾这玩意儿了啊

同事只是简单把问题的现象和他们的想法说了一下,我再去了解一下,然后发上来大家给出出主意。

使用道具 举报

回复
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
26#
 楼主| 发表于 2015-7-28 17:09 | 只看该作者
dhhb 发表于 2015-7-28 17:04
systimestamp是从OS级别获取的,oracle应该只精确到microsecond. 这个不用想进一步取nanosecond了,换个思路 ...

同事只是简单把问题的现象和他们的想法说了一下,我再去了解一下,然后发上来大家给出出主意。

使用道具 举报

回复
论坛徽章:
3
懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18天蝎座
日期:2016-05-14 12:00:32
27#
发表于 2015-7-28 19:51 | 只看该作者
CREATE OR REPLACE FUNCTION NEWTIME_FUNC
RETURN VARCHAR2
AUTHID CURRENT_USER
  IS
   V_TIEM VARCHAR2 (22);
BEGIN
  V_TIEM := '0';
  V_TIEM := TO_CHAR (SYSTIMESTAMP , 'MMDDHH24MISSFF6');
  V_TIEM := V_TIEM || TRIM(TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(1,999999)),'000000'));
  RETURN V_TIEM;
EXCEPTION
WHEN OTHERS THEN
   RETURN LPAD (V_TIEM, 22, '0');
END NEWTIME_FUNC;

保證絕對不會重複, 祝你好運.

使用道具 举报

回复
论坛徽章:
40
2014年新春福章
日期:2014-02-18 16:43:09喜羊羊
日期:2015-05-18 16:24:25慢羊羊
日期:2015-06-12 13:08:22暖羊羊
日期:2015-07-02 16:06:20暖羊羊
日期:2015-07-06 16:28:55狮子座
日期:2015-07-29 17:14:43摩羯座
日期:2015-09-02 13:58:47白羊座
日期:2015-09-08 10:39:06天枰座
日期:2015-09-17 21:41:53摩羯座
日期:2015-10-29 21:07:02
28#
 楼主| 发表于 2015-7-28 21:28 | 只看该作者
taomct 发表于 2015-7-28 19:51
CREATE OR REPLACE FUNCTION NEWTIME_FUNC
RETURN VARCHAR2
AUTHID CURRENT_USER

多谢,与我在7楼的想法不谋而合,只是想看看能不能直接取到纳秒级,毕竟加随机数的这种方法的代价要高一些。

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
29#
发表于 2015-7-28 22:13 | 只看该作者
我的笔记本也只能看到三位。可能C外部程序或者JAVA可以截到。
即使9位全出来,理论上讲也是可能重复的。所以设计上得用SEQUENCE或者SYS_GUID。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
30#
发表于 2015-7-29 13:32 | 只看该作者
oracle_cj 发表于 2015-7-28 15:06
通过其他方式避免啊。。。

非常赞同这个处理思路

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表