如何解决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_a
。 int
是 number(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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。