【问题标题】:SQL Table Error: missing right parenthesisSQL 表错误:缺少右括号
【发布时间】:2018-09-12 23:11:11
【问题描述】:
CREATE TABLE STUDENT
(
    STUDENT_NAME CHAR(20),
    FATHER_NAME CHAR(20),
    ENROLL_NO INT(12),
    PHONE_NO INT(12),
    EMAIL_ID CHAR(20),
    ADDRESS CHAR(20),
    COURSE CHAR(20),
    D_O_B DATE,
);

我上面的表格显示了这个错误

错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号”

我无法理解缺少哪个右括号。

【问题讨论】:

标签: sql oracle


【解决方案1】:

只需从最后一行删除逗号 (,)

这是您的正确代码 (MySQL)

CREATE TABLE STUDENT
(
      STUDENT_NAME CHAR(20),
      FATHER_NAME CHAR(20),
      ENROLL_NO INT(12),
      PHONE_NO INT(12),
      EMAIL_ID CHAR(20),
      ADDRESS CHAR(20),
      COURSE CHAR(20),
      D_O_B DATE
);

更新 :: INT 不受 oracle 支持。用户 NUMBER 数据类型。

这是oracle的更新代码

CREATE TABLE STUDENT_TABLE
(
  STUDENT_NAME CHAR(20),
  FATHER_NAME CHAR(20),
  ENROLL_NO NUMBER(10),
  PHONE_NO NUMBER(10),
  EMAIL_ID VARCHAR(20),
  ADDRESS VARCHAR(20),
  COURSE VARCHAR(20),
  D_O_B DATE
);

【讨论】:

  • 它仍然显示错误。从第 1 行开始的错误命令 - CREATE TABLE STUDENT (STUDENT_NAME CHAR(20), FATHER_NAME CHAR(20), ENROLL_NO INT(12), PHONE_NO INT(12), EMAIL_ID CHAR(20), ADDRESS CHAR(20), COURSE CHAR(20), D_O_B DATE ) 错误报告 - ORA-00907: 缺少右括号 00907. 00000 - “缺少右括号” *原因:*操作:
  • 你复制我的确切代码,它的工作。检查此链接 - sqlfiddle.com/#!9/ed7fef
  • 错误是oracle,设置为oracle时在sqlfiddle中失败。
【解决方案2】:

我试过了。它对我有用。

CREATE TABLE STUDENT_TABLE
(
  STUDENT_NAME CHAR(20),
  FATHER_NAME CHAR(20),
  ENROLL_NO NUMBER(10),
  PHONE_NO NUMBER(10),
  EMAIL_ID VARCHAR(20),
  ADDRESS VARCHAR(20),
  COURSE VARCHAR(20),
  D_O_B DATE
);

【讨论】:

    【解决方案3】:

    甲骨文?摆脱 CHAR 和 VARCHAR 数据类型,改用 VARCHAR2

    SQL> CREATE TABLE STUDENT
      2    ( STUDENT_NAME VARCHAR2(20),
      3      FATHER_NAME  VARCHAR2(20),
      4      ENROLL_NO    NUMBER(12),
      5      PHONE_NO     NUMBER(12),
      6      EMAIL_ID     VARCHAR2(20),
      7      ADDRESS      VARCHAR2(20),
      8      COURSE       VARCHAR2(20),
      9      D_O_B        DATE
     10  );
    
    Table created.
    
    SQL>
    

    除此之外,该表没有定义主键,而且 - 在我看来 - 它应该。一些NOT NULL 约束(例如,在 STUDENT_NAME 上)可能是一个不错的选择。

    再想一想,为什么是 STUDENT_NAME?它没有规范化 - 应该(至少)拆分为 STUDENT_FIRST_NAME 和 STUDENT_LAST_NAME。

    有人(@Vikash,3 小时前发帖)说Oracle 不支持INT 数据类型;好吧,确实如此,但您更愿意使用 NUMBER:

    SQL> create table test
      2    (phone_no int);
    
    Table created.
    

    但你不能设置它的精度:

    SQL> create table test_2
      2    (phone_no int(12));
      (phone_no int(12))
                   *
    ERROR at line 2:
    ORA-00907: missing right parenthesis
    
    
    SQL>
    

    所以 - 在您的代码中 - 使用 INTNUMBER(12),但要注意 意外 陷阱(即舍入),例如

    SQL> create table test
      2    (num1 int,
      3     num2 number(12));
    
    Table created.
    
    SQL> insert into test values (123.456, 123.456);
    
    1 row created.
    
    SQL> select * From test;
    
          NUM1       NUM2
    ---------- ----------
           123        123
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-23
      • 2015-03-31
      • 2021-05-06
      • 2018-03-27
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多