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_a
。 int
是 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) );
我已经坐下来查看这段代码几个小时了,但我不明白我哪里出错了,为什么它不起作用。
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_a
。 int
是 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) );