ORA-00907: ORACLE 10G 中缺少右括号

Posted

技术标签:

【中文标题】ORA-00907: ORACLE 10G 中缺少右括号【英文标题】:ORA-00907: missing right parenthesis in ORACLE 10G 【发布时间】:2020-07-10 04:54:00 【问题描述】:

我正在创建一个表格,但它一直给我错误。

ORA-00907: 缺少右括号

我的代码:

CREATE TABLE EMP (
    ENO CHAR(3) NOT NULL PRIMARY KEY,
    ENAME VARCHAR(50) NOT NULL,
    JOB_TYPE VARCHAR(50) NOT NULL,
    MANAGER CHAR(3) DEFAULT NULL,
    HIRE_DATE DATE NOT NULL,
    DNO INTEGER(11) NOT NULL,
    COMMISSION DECIMAL(10,2) DEFAULT NULL,
    SALARY DECIMAL(7,2) NOT NULL,
    CONSTRAINT DNO FOREIGN KEY (DNO) REFERENCES DEPARTMENTS(DNO),
    CONSTRAINT MANAGER FOREIGN KEY (MANAGER) REFERENCES EMP(ENO)
);

【问题讨论】:

几个建议,如果可以的话:char(n) 很少需要或有帮助;你会发现varchar2(n) 几乎总是更好。然后:在甲骨文世界中,使用varchar2(n) 比使用varchar(n) 好得多——最好不要问为什么。而且,对于数字,最好学习使用 Oracle 标准数据类型number(m, n)。用number(11,0)代替integer(11),用number(7,2)代替decimal(7, 2) 我还看到这个问题有两个反对意见。不好的是,对一个完全有效的问题投了反对票的猴子并不觉得有必要表达他们的反对意见。也许这个问题太基本了,也许他们希望您“阅读文档”,无论如何 - 至少留下他们认为错误的注释,以便其他人可以就他们的反对意见发表意见。不要气馁;您在本网站上获得的帮助将弥补您不得不忍受的烦恼。 感谢您的建议。 【参考方案1】:

删除整数的 sizeDNO 列):

SQL> select * from v$version where rownum = 1;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi

SQL> CREATE TABLE EMP
  2  (
  3     ENO         CHAR (3) NOT NULL PRIMARY KEY,
  4     ENAME       VARCHAR (50) NOT NULL,
  5     JOB_TYPE    VARCHAR (50) NOT NULL,
  6     MANAGER     CHAR (3) DEFAULT NULL,
  7     HIRE_DATE   DATE NOT NULL,
  8     DNO         INTEGER NOT NULL,
  9     COMMISSION  DECIMAL (10, 2) DEFAULT NULL,
 10     SALARY      DECIMAL (7, 2) NOT NULL,
 11     CONSTRAINT DNO FOREIGN KEY (DNO) REFERENCES DEPARTMENTS (DNO),
 12     CONSTRAINT MANAGER FOREIGN KEY (MANAGER) REFERENCES EMP (ENO)
 13  );

Table created.

SQL>

【讨论】:

如果它对您有用,您应该接受答案,以便将此问题标记为已解决。 诊断是正确的,但治疗方法——在我看来——并不是最好的。如果 OP 有充分的理由将整数的大小限制为 11 位,那么更好的选择是不要使用 integer(对大小没有限制),而是使用 number(11,0) @mathguy 。 . .在 mysql 中(支持语法并且可能是造成混淆的原因),int(11) 没有指定存储的位数。它只是指定值的显示宽度。

以上是关于ORA-00907: ORACLE 10G 中缺少右括号的主要内容,如果未能解决你的问题,请参考以下文章

错误:ORA-00907:oracle 缺少右括号

Oracle 错误 - ORA-00907: 缺少右括号

Oracle 缺少右括号 ORA-00907

Oracle Live SQL:ORA-00907:缺少右括号 -

在 oracle SQL 中使用 insrt 函数遇到“ORA-00907:缺少右括号”

从 DB2 移植到 ORACLE - ORA-00907:缺少右括号