Oracle:自定义自动增量:C0001 C0002

时间:2013-05-30 18:50:39

标签: oracle11g auto-increment

我正在尝试在Oracle sql中创建一个表。 我创建表格没有问题,我创建的序列工作正常。 现在我可以使用表格拨打姓名和电子邮件,表格将为我创建PK。 PK ID看起来像这样:

10001 | xxx | xxxx
10002 | xxx | xxxx
10003 | xxx | xxxx

我的问题是,如何使用功能或触发器自动更新我的ID,使其成为:

QWER10001 | xxx | xxxx
QWER10002 | xxx | xxxx
QWER10003 | xxx | xxxx

我知道如何手动更新它,但我希望它可以在我输入信息时将自定义文本放在我的ID前面。

可以设置文本,当数字达到最大值时无需更改

我花了几个小时寻找解决方案,但找不到合适的解决方案,请帮忙!


我还在网上做了更多研究,现在我有了这个:

CREATE OR REPLACE TRIGGER "PROFILE_T1"
   BEFORE INSERT OR UPDATE
   ON "PROFILE"
   FOR EACH ROW
BEGIN
   :NEW.PROFILEID := 'WCCU' sequence.PROFILEIDUSE
END;

但这不起作用。 PROFILEID是PK并自动递增。 PROFILEIDUSE是使其自动递增的序列。 WCCU是我想在输入每个数据时添加到PK的文本。

2 个答案:

答案 0 :(得分:0)

创建或替换触发器“PROFILE_T1”

插入“PROFILE”

每行

开始

:new.PROFILEID:='WCCU'|| PROFILEIDUSE.nextval;

端;

答案 1 :(得分:0)

由于您已经创建了sequence,因此您只需在INSERT语句中使用它,您应该明确指定列值。如果您不想在insert语句中明确指定值,则可以使用before inert触发器来设置列的值。

在INSERT语句中

insert into your_table values('QWER'||your_sequence.nextval,....);

使用TRIGGER

CREATE OR REPLACE TRIGGER your_trigger
   BEFORE INSERT ON your_table
   FOR EACH ROW
DECLARE
BEGIN
   :new.your_primary_key_column := 'QWER' || your_sequence.nextval;
END your_trigger;

现在,您可以从insert语句中排除此主列。触发器将为您添加它。