如何修复Oracle数据库中的ORA-00907缺失右括号错误?
修复Oracle数据库ORA-00907(缺失右括号)错误
嘿,这个报错其实是因为你用了SQL Server风格的语法来写Oracle的建表语句,Oracle没法识别这些不兼容的语法,才抛出了看似“缺失右括号”的错误。我帮你拆解问题并给出修正方案:
问题点拆解
IDENTITY(1,1)语法不兼容:Oracle的自增列语法和SQL Server不一样,12c及以后版本支持GENERATED AS IDENTITY的写法,更早版本则需要配合序列+触发器实现自增NVARCHAR(50)类型不存在:Oracle没有NVARCHAR类型,要存储Unicode字符可以用VARCHAR2(50 CHAR)(指定CHAR表示按字符数存储,避免字节数限制)VARBINARY(MAX)类型不支持:Oracle中存储大二进制数据对应的是BLOB类型,和SQL Server的VARBINARY(MAX)功能一致
修正后的建表语句(Oracle 12c+版本)
CREATE TABLE Attach_Files ( FileID INT GENERATED AS IDENTITY START WITH 1 INCREMENT BY 1 NOT NULL, Name VARCHAR2(50 CHAR) NOT NULL, Files BLOB NOT NULL );
兼容Oracle 11g及更早版本的方案
如果你的Oracle版本低于12c,没法直接用GENERATED AS IDENTITY,需要手动创建序列和触发器:
- 先创建序列:
CREATE SEQUENCE seq_attach_files START WITH 1 INCREMENT BY 1;
- 再创建触发器实现自增:
CREATE OR REPLACE TRIGGER trg_attach_files_id BEFORE INSERT ON Attach_Files FOR EACH ROW BEGIN SELECT seq_attach_files.NEXTVAL INTO :NEW.FileID FROM DUAL; END; /
- 对应的建表语句:
CREATE TABLE Attach_Files ( FileID INT NOT NULL, Name VARCHAR2(50 CHAR) NOT NULL, Files BLOB NOT NULL );
内容的提问来源于stack exchange,提问作者Aswin_kumar
相关产品推荐
相关产品推荐

