-2

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

ORA-00907: 缺少右括号

我看到这是一个讨论很多的话题,但由于某种原因,我看到的例子都没有帮助我。我很确定括号没问题。

这是代码:

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) 
);
4

2 回答 2

3

您不能为intOracle 中的数据类型指定精度。您正在将它用于列id_aint是 的简写number(38,0)

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

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

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

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

于 2021-03-08T00:06:10.720 回答
-1

您不能为 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) );
于 2021-03-08T02:14:47.417 回答