在 Oracle 中使用触发器和序列的特定序列 SQL

Specific Sequence using Trigger & Sequence in Oracle SQL

我有一个 SQL Table,我为此编写了触发器和序列,每次都会在列中插入 'I'、'U'、'D'一条记录被插入、删除或更新。 每次在 table 中插入新记录时,我还需要一个序列,所以我为此使用了一个序列。

 CREATE TABLE "USER_DETAILS" 
   (  
  "ID" NUMBER(10,0) GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1), 
  "NAME" VARCHAR2(50 BYTE), 
  "CONTACT" NUMBER(10,0),
  "STATUS" CHAR(1),
  SEQUENCE VARCHAR2(50)
);

我的输出是这样的,序号按照我写的顺序从A00001开始。

ID  NAME     CONTACT  STATUS SEQUENCE

1   USER1   123456789   I     A00001
2   USER2   123456789   I     A00002

这是我 "STATUS"

的触发器
create or replace trigger insert_trigger before insert on USER_DETAILS for each row

begin
  insert into USER_DETAILS
    (ID,NAME,CONTACT,STATUS, SEQUENCE)
  values
    (:new.id,:new.name,:new.contact,'I',NULL);

end; 

这是我在 "Sequence" 字段中的序列。

create or replace trigger insert_trigger before insert on USER_DETAILS for each row
begin
  :new.SEQUENCE := 'A'||to_char(REF_SEQUENCE.nextval,'FM00000');
 end; 

但现在的要求是从字段的第一个字母开始序列 "Name"。 例如:如果名称是 "User1" 那么序列应该是 "U00001" ,如果名称是 "Random1" 那么序列应该是 "R00001"

不知道如何实现他的功能。求助!!!

您可以使用 lpadsubstr 字符串运算符创建如下序列:

create or replace trigger insert_trigger before insert on USER_DETAILS for each row
begin
  :new.SEQUENCE := substr(:new.name,1,1)||lpad(to_char(REF_SEQUENCE.nextval),5,'0');
 end;

P.S。不要使用已弃用的数据类型 CHAR,而是对所有字符串类型列使用 VARCHAR2