另外,你说的取更精确时间是可以的(在 Oracle 9i 中),但是不是 Date 的类型,而是“时间戳”的数据类型,具体的取法你可以参考一下新出的 9i 的手册
同意楼上的! 前台程序控制比较不错 以一个32位的GUID或者自己随机生成一个,也不错。
CREATE SEQUENCE GHNO INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E28 MINVALUE 1 CYCLE NOCACHE NOORDER;CREATE OR REPLACE TRIGGER YYGHNOADD BEFORE INSERT ON YYGHDJ FOR EACH ROW begin select to_char(sysdate,'yyyymmdd') || lpad(ghno.nextval,4,'0') into :new.yyghno from dual; end; /
select sys_guid() from dual;
用时间戳-TimeStamp类型,可以精确到秒的小数位,可以用来作为表的行级锁
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff1') from dual; ... select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff9') from dual;select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual=select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ssxff') from dual
SQL> select * from fnd_user a where a.user_id=1055; Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=219) 1 0 TABLE ACCESS (BY INDEX ROWID) OF 'FND_USER' (Cost=1 Card=1 Bytes=219) 2 1 INDEX (UNIQUE SCAN) OF 'FND_USER_U1' (UNIQUE)--BY INDEX ROWID
前台程序控制比较不错
以一个32位的GUID或者自己随机生成一个,也不错。
MAXVALUE 1.0E28 MINVALUE 1 CYCLE
NOCACHE NOORDER;CREATE OR REPLACE TRIGGER YYGHNOADD
BEFORE INSERT ON YYGHDJ
FOR EACH ROW
begin
select to_char(sysdate,'yyyymmdd') || lpad(ghno.nextval,4,'0') into :new.yyghno from dual;
end;
/
...
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff9') from dual;select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ff6') from dual=select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss.ssxff') from dual
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=219)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'FND_USER' (Cost=1 Card=1
Bytes=219) 2 1 INDEX (UNIQUE SCAN) OF 'FND_USER_U1' (UNIQUE)--BY INDEX ROWID