[英]Specific Sequence using Trigger & Sequence in Oracle SQL
我有一个SQL表,为此我编写了触发器和序列,每次插入,删除或更新记录时,该触发器都会在列中插入“ I”,“ U”,“ D”。 每当将新记录插入表中时,我还需要一个序列,因此我为此使用了一个序列。
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;
这是我的“序列”字段的序列。
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;
但是现在的要求是从“名称”字段的第一个字母开始序列。 例如:如果名称为“ User1”,则序列应为“ U00001” ,如果名称为“ Random1”,则序列应为“ R00001”
我不知道如何实现他的功能。 救命!!!。
您可以使用lpad
和substr
字符串运算符来创建类似以下的序列:
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;
PS不使用不推荐使用的数据类型CHAR
,而是将VARCHAR2
用于所有字符串类型的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.