ORA-00907: 缺少右括号,没有任何工作

ORA-00907: missing right parenthesis, and nothing is working

我已经坐下来查看这段代码几个小时了,但我不明白我哪里出错了,为什么它不起作用。

ORA-00907: missing right parenthesis

我看到这是一个被广泛讨论的话题,但出于某种原因,none 我看到的示例对我有所帮助。我很确定括号没问题。

代码如下:

CREATE TABLE ADT_FILIALA_AGENTIE (
  id_f  NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE  NOT NULL ENABLE,
  name  varchar(30) NOT NULL,
  telephone  varchar(30) NOT NULL,
  adress  varchar(30) NOT NULL,
  nr_an  varchar(30) NOT NULL,
  id_a  int(11) NOT NULL,
  PRIMARY KEY(id_f),
  FOREIGN KEY(id_a) REFERENCES ADT_AGENTIE_PRINCIPALA(id_a) 
);

您不能在 Oracle 中为 int 数据类型指定精度。您将它用于列 id_aint 是 shorthand 对于 number(38,0)

要获得所需的效果,请将其替换为 number(11,0) - 这意味着 11 位数字的精度,其中小数位为零。

除此之外,在 Oracle 中,您最好使用 varchar2(n) 而不是 varchar(n)。很长一段时间以来,Oracle 一直警告我们,在未来的版本中,varchar 可能会用于其他用途(即使这还没有发生,也不太可能发生)。

解释错误消息:在解析器读取 id_a int 之后,它期望(可选的 space 和)逗号或约束等。它不期望什么(因为它使在那个位置没有意义)是一个左括号,就像你在 (11) 中一样。编写错误处理是为了假设 create table 语句应该在此时结束 - 带有右括号。它没有找到它,所以它会抱怨。

这就是为什么您看到这么多不相关的“缺少右括号”错误的原因 - 当解析器在语句中发现意外内容时,它们通常会抛出这些错误。解析器不知道真正的错误是什么 - 它只是在某处看到一些没有意义的东西,如果在那个时候右括号结束了一个有效的语句,它就会抛出那个错误。

您不能在 Oracle 中为 int 数据类型指定精度。您将它用于列 id_a int.

CREATE TABLE ADT_FILIALA_AGENTIE ( id_f  NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE  NOT NULL ENABLE,
name  varchar(30) NOT NULL,
telephone  varchar(30) NOT NULL,
adress  varchar(30) NOT NULL,
nr_an  varchar(30) NOT NULL,
id_a  int NOT NULL,
PRIMARY KEY(id_f),
FOREIGN KEY(id_a) REFERENCES ADT_AGENTIE_PRINCIPALA(id_a) );