You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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,需要手动创建序列和触发器:

  1. 先创建序列:
CREATE SEQUENCE seq_attach_files START WITH 1 INCREMENT BY 1;
  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;
/
  1. 对应的建表语句:
CREATE TABLE Attach_Files (
    FileID INT NOT NULL,
    Name VARCHAR2(50 CHAR) NOT NULL,
    Files BLOB NOT NULL
);

内容的提问来源于stack exchange,提问作者Aswin_kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 19:12:45