【发布时间】:2017-09-28 16:35:12
【问题描述】:
我正在使用 Oracle SQL:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0
PL/SQL Release 12.1.0.2.0 - Production 0
CORE 12.1.0.2.0 Production 0
TNS for Linux: Version 12.1.0.2.0 - Production 0
NLSRTL Version 12.1.0.2.0 - Production
我需要帮助弄清楚如何为下面的关键字段创建序列:
我有一个表,其中包含一个名为 MY_ID 的字段。
MY_ID 需要在插入记录时使用序列自动生成。
序列的规则是字符串前缀、每天递增 1 并在午夜重置的计数器以及日期的组合。
例如: 9 月 10 日,我们插入了 2 条记录,那么 MY_ID 应该是:
PREFIX_01_20170910
PREFIX_02_20170910
9 月 11 日:
PREFIX_01_20170911
PREFIX_02_20170911
PREFIX_03_20170911
9 月 12 日,整张桌子可能是这样的
PREFIX_01_20170910
PREFIX_02_20170910
PREFIX_01_20170911
PREFIX_02_20170911
PREFIX_03_20170911
PREFIX_01_20170912
到目前为止,无论日期如何,我对序列所能做的就是递增 1:
CREATE SEQUENCE SEQ_MY_TABLE INCREMENT BY 1 MAXVALUE 9999999999999999999999999999 MINVALUE 1 NOCACHE;
和触发器:
create or replace TRIGGER MY_TABLE_TRG
BEFORE INSERT ON MY_TABLE
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.MY_ID IS NULL THEN
SELECT SEQ_MY_TABLE .NEXTVAL INTO :NEW.MY_ID FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
谢谢!
【问题讨论】: