0

我正在尝试在 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 中的文本。

4

2 回答 2

0

创建或替换触发器“PROFILE_T1”

插入“个人资料”

对于每一行

开始

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

结尾;

于 2013-06-04T15:50:40.147 回答
0

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

在 INSERT 语句中

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

使用触发器

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语句中排除此主列。触发器将为您添加它。

于 2013-06-04T15:55:15.623 回答