Oracle 19c运行SQL Server带前缀唯一ID建表语句报错如何解决
你使用的这段建表代码是SQL Server 专属语法,本身就不适用于Oracle 19c,语法规则差异是报错的核心原因。
核心语法差异说明
- 自增列定义不同:SQL Server 使用
IDENTITY(1,1)定义自增列,同时支持CLUSTERED关键字指定聚簇主键,这两个语法规则均不被Oracle支持。 - 计算列定义不同:SQL Server 使用
AS 表达式 PERSISTED定义持久化计算列,字符串拼接用+运算符,该写法不符合Oracle规范。 - 标识符转义规则不同:SQL Server 使用方括号
[]转义包含特殊字符/关键字的标识符,Oracle需使用双引号,且双引号包裹的标识符会强制区分大小写,不建议随意使用。
Oracle 19c 适配实现方案
你需要的HIDxxxx格式(前缀+4位补零自增数)的唯一ID,对应建表代码如下:
CREATE TABLE tblUsers ( ID INT GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL PRIMARY KEY, UserID GENERATED ALWAYS AS ('HID' || LPAD(ID, 4, '0')) VIRTUAL, Name VARCHAR(50) NOT NULL );
说明
- 如果需要将UserID的值物理存储在表中(对应SQL Server的
PERSISTED属性),可以把上述语句中的VIRTUAL改为STORED即可。 - 如果需要调整补零位数,比如要生成8位长度的数字后缀(
HID00000014),把LPAD(ID, 4, '0')中的4改成8即可。
效果验证
插入测试数据:
INSERT INTO tblUsers (Name) VALUES ('测试用户1'); INSERT INTO tblUsers (Name) VALUES ('测试用户2');
查询结果:
SELECT ID, UserID, Name FROM tblUsers;
就能得到符合要求的HID0001、HID0002格式的唯一ID。
内容的提问来源于stack exchange,提问作者Dabrownie
相关产品推荐
相关产品推荐

