ORA-00907: 缺少右括号,没有任何效果

问题描述

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

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

解决方法

您不能在 Oracle 中为 int 数据类型指定精度。您将它用于列 id_aintnumber(38,0) 的简写。

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

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

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

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

,

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

$ rustup component add rustc-dev 
info: downloading component 'rustc-dev'
info: installing component 'rustc-dev'
info: using up to 500.0 MiB of RAM to unpack components
102.5 MiB / 102.5 MiB (100 %)  18.9 MiB/s in  5s ETA:  0s
$ cargo --version
cargo 1.52.0-nightly (c68432f1e 2021-03-02)
$ rustc --version
rustc 1.52.0-nightly (caca2121f 2021-03-05)
$ cargo build --verbose
   Compiling inductive v0.1.0 (/Users/fakedrake/Projects/Rust/inductive)
     Running `rustc --crate-name inductive src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type dylib --emit=dep-info,link -C prefer-dynamic -C embed-bitcode=no -C debuginfo=2 -C metadata=9adf86ab36dcd7bb --out-dir /Users/fakedrake/Projects/Rust/inductive/target/debug/deps -C incremental=/Users/fakedrake/Projects/Rust/inductive/target/debug/incremental -L dependency=/Users/fakedrake/Projects/Rust/inductive/target/debug/deps`
error[E0463]: can't find crate for `rustc`
 --> src/lib.rs:4:1
  |
4 | extern crate rustc;
  | ^^^^^^^^^^^^^^^^^^^ can't find crate

error: aborting due to previous error

For more information about this error,try `rustc --explain E0463`.
error: could not compile `inductive`

Caused by:
  process didn't exit successfully: `rustc --crate-name inductive src/lib.rs --error-format=json --json=diagnostic-rendered-ansi --crate-type dylib --emit=dep-info,link -C prefer-dynamic -C embed-bitcode=no -C debuginfo=2 -C metadata=9adf86ab36dcd7bb --out-dir /Users/fakedrake/Projects/Rust/inductive/target/debug/deps -C incremental=/Users/fakedrake/Projects/Rust/inductive/target/debug/incremental -L dependency=/Users/fakedrake/Projects/Rust/inductive/target/debug/deps` (exit code: 1)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...