Oracle 19c中如何实现带文本+自动编号的表列默认值
解决方案(Oracle 19c)
步骤1:创建序列
先定义两个自增序列,分别用于col1和col2的自动生成值:
CREATE SEQUENCE test_sq START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE; CREATE SEQUENCE test_sq1 START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE;
START WITH 1指定序列从1开始INCREMENT BY 1设置每次递增1NOCACHE避免预缓存序列值(适合小量数据场景)NOCYCLE指定序列达到最大值后不循环
步骤2:创建目标表
修正原代码的错误,确保col2的类型和格式符合需求:
CREATE TABLE test ( col1 NUMBER DEFAULT test_sq.NEXTVAL, col2 VARCHAR2(7) DEFAULT 'REQ-' || TO_CHAR(test_sq1.NEXTVAL, 'FM00000'), col3 VARCHAR2(20) );
关键修正说明
- 类型匹配:原代码将
col2定义为NUMBER,但需求是带字符前缀的字符串,因此改为VARCHAR2(7)(REQ-00001共7个字符)。 - 格式生成:使用
TO_CHAR(test_sq1.NEXTVAL, 'FM00000')直接将序列值格式化为5位带前导零的数字字符串,再与REQ-拼接,比LPAD更直观可靠。FM用于去除格式转换时可能产生的空格。
测试验证
执行插入语句验证自动生成效果:
INSERT INTO test (col3) VALUES ('测试数据1'); INSERT INTO test (col3) VALUES ('测试数据2'); SELECT * FROM test;
查询结果示例:
| COL1 | COL2 | COL3 |
|---|---|---|
| 1 | REQ-00001 | 测试数据1 |
| 2 | REQ-00002 | 测试数据2 |
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

