我有一个小表,用于插入配置数据。
CREATE SEQUENCE AGENT_GROUP_SEQ
INCREMENT BY 1
MAXVALUE 9999999999999999999999999999
NOMINVALUE
CACHE 20
/
CREATE TABLE AGENT_GROUP(
ID NUMBER(38,0) NOT NULL,
NAME VARCHAR2(40 ) NOT NULL,
STATUS VARCHAR2(30 ),
TYPE VARCHAR2(30 ),
DATE_ADDED DATE,
LAST_MODIFIED DATE,
DESCRIPTION CLOB
)
/
CREATE TRIGGER AGENT_GROUP_TRG
BEFORE INSERT
ON AGENT_GROUP
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
<<COLUMN_SEQUENCES>>
BEGIN
IF INSERTING AND :NEW.ID IS NULL THEN
SELECT AGENT_GROUP_SEQ.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
END IF;
END COLUMN_SEQUENCES;
END;
/
我有一个ID列,用于唯一编号。我设法创建序列,它将在每个插入上自动生成ID值。但问题是我有太多的插入和删除操作一段时间后我将达到序列最大值。
有没有其他方法可以在每次插入时生成随机ID?
答案 0 :(得分:1)
使用某种UUID生成服务器端或使用db功能。
答案 1 :(得分:0)
您的触发器以及您的问题非常详细&#34;详细&#34;。 不是您问题的真实答案,但此代码与您的代码完全相同。
CREATE TRIGGER AGENT_GROUP_TRG
BEFORE INSERT ON AGENT_GROUP
FOR EACH ROW
BEGIN
:NEW.ID := NVL(:NEW.ID, AGENT_GROUP_SEQ.NEXTVAL);
END;
/
简化你的生活!
关于你的序列。如果您担心,可以将其设为CYCLE
。
不用担心,即使您的表只包含一个包含此主键的列,数据量也将超过全球所有可用存储容量。
CREATE SEQUENCE AGENT_GROUP_SEQ START WITH 1 NOMAXVALUE MINVALUE 1 CYCLE CACHE 20;