Oracle - 如何使用varchar类型创建自动增量列?

时间:2014-04-11 12:38:29

标签: sql oracle auto-increment

在我使用Oracle 11g的任务中,我被要求创建一个具有此结构的列的表:

    [NL|TE|][0-9]^10

当INSERT行和[0-9] ^ 10是自动递增10位数时,输入NL或TE。 例如:

    NL1234567890 or TE0253627576

当INSERT时,用户应该只写这个:

    INSERT INTO TableA VALUES ('NL');

DBMS负责其余部分。那我该怎么办呢?我仍然是这件事的新手。

3 个答案:

答案 0 :(得分:3)

CREATE SEQUENCE your_seq;
/

CREATE OR REPLACE TRIGGER your_tablename_BI
BEFORE INSERT
ON your_tablename
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
 :NEW.your_col := :NEW.your_col || trim(to_char(your_seq.nextval, '0000000000'));

END your_tablename_BI;
/

答案 1 :(得分:1)

示例代码?

'NL' || to_char(yoursequence.nextval)

答案 2 :(得分:1)

我会将它们作为单独的列保留。一个是带有NL或其他的VARCHAR2,另一个是由序列填充的NUMBER。

然后,您可以在查询时将它们连接起来(如果需要,可以将其放在视图中)或使用虚拟列。

为什么呢?我几乎可以向你保证,在某些时候你需要查询字符部分或数字部分的表格,或者在一个或另一个上进行排序。由于你将它们分开,这很容易。如果您将它们压缩成一个列,则必须在查询时解析这些值,这会导致代码比您需要的更复杂。