+ -
当前位置:首页 → 问答吧 → 求助,oracle的sysdate问题

求助,oracle的sysdate问题

时间:2011-11-16

来源:互联网

我有一张表,里面的date属性设置了唯一约束,这样写存储过程的时候就出了问题,当连续插入两条sysdate的时候,调试时没有问题,因为会有时间间隔,而直接运行的时候速度太快,sysdate来不及变,就会违反唯一约束条件,插入失败,谁知道怎么解决这个问题,我的表结构跟约束是不可能变的,我在想可不可以让这两条数据插入的时候中间有个延时之类的功能,这样sysdate就不会一样了,谁知道怎么解决啊?????

作者: yc1172000   发布时间: 2011-11-16

可以在PL/SQL代码中使用延时操作。
DBMS_LOKC.SLEEP(毫秒数);

作者: LuiseRADL   发布时间: 2011-11-16

可以在PL/SQL代码中使用延时操作。
DBMS_LOKC.SLEEP(毫秒数);

作者: LuiseRADL   发布时间: 2011-11-16

为什么不用 systimestamp

作者: scrack   发布时间: 2011-11-16

顶下:
引用 3 楼 scrack 的回复:
为什么不用 systimestamp


select systimestamp from dual;

作者: yixilan   发布时间: 2011-11-16

引用 3 楼 scrack 的回复:
为什么不用 systimestamp

lz万万不可延时,此乃下下之策啊.
别人努力想把performance提高,lz反其道而行之,必将遭人唾骂.
修改字段类型为timestamp,插入数据时使用systimestamp即可

作者: tx2730   发布时间: 2011-11-16

引用楼主 yc1172000 的回复:
我有一张表,里面的date属性设置了唯一约束,这样写存储过程的时候就出了问题,当连续插入两条sysdate的时候,调试时没有问题,因为会有时间间隔,而直接运行的时候速度太快,sysdate来不及变,就会违反唯一约束条件,插入失败,谁知道怎么解决这个问题,我的表结构跟约束是不可能变的,我在想可不可以让这两条数据插入的时候中间有个延时之类的功能,这样sysdate就不会一样了,谁知道怎么解决啊????……


没有必要延时,两个解决方向:
1. 如大家所言,换成时间戳
2. 不使用sysdate,使用程序更改该时间点,例如:
insert into table1 (dt)
 select sysdate + rownum/(24*60*60) from table2; --每条记录延时1秒

作者: xiaobn_cn   发布时间: 2011-11-16

timestamp比较靠谱

作者: minitoy   发布时间: 2011-11-16

使用systimestamp又如何,楼主的表结构不能改变,存储时还是原来的Date类型,秒后面的数据又不能存储进去。

作者: LuiseRADL   发布时间: 2011-11-16

SQL code
主要是靠需求,确认有那个需求的话,
改为timestamp
值为:systimestamp 毫秒级的!

作者: cosio   发布时间: 2011-11-16