在我使用Oracle 11g的任务中,我被要求创建一个具有此结构的列的表:
[NL|TE|][0-9]^10
当INSERT行和[0-9] ^ 10是自动递增10位数时,输入NL或TE。 例如:
NL1234567890 or TE0253627576
当INSERT时,用户应该只写这个:
INSERT INTO TableA VALUES ('NL');
DBMS负责其余部分。那我该怎么办呢?我仍然是这件事的新手。
答案 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。
然后,您可以在查询时将它们连接起来(如果需要,可以将其放在视图中)或使用虚拟列。
为什么呢?我几乎可以向你保证,在某些时候你需要查询字符部分或数字部分的表格,或者在一个或另一个上进行排序。由于你将它们分开,这很容易。如果您将它们压缩成一个列,则必须在查询时解析这些值,这会导致代码比您需要的更复杂。