【问题标题】:Missing Right parenthesis error?缺少右括号错误?
【发布时间】:2015-11-16 02:34:13
【问题描述】:

我正在尝试在 sqldeveloper 中创建一个表,但是当没有缺少右括号时,我不断收到缺少右括号的错误。对此有任何修复,还是我只是试图以错误的方式创建表?

CREATE TABLE Patient_T1(
  PATIENT_ID  INT(100) NOT NULL,
  FIRST_NAME  VARCHAR(20) NOT NULL,
  LAST_NAME   VARCHAR(30) NOT NULL,
  DOB         CHAR(10)    NOT NULL,
  P_STREET_ADRESS VARCHAR(50) NOT NULL,
  PATIENT_CITY    VARCHAR(30) NOT NULL,
  PATIENT_STATE   CHAR(2) NOT NULL,
  PATIENT_ZIP  CHAR(5)    NOT NULL,
  PATIENT_PHONE CHAR(12)  NOT NULL,
  PATIENT_ROOM  INT(1000) NOT NULL,
  CONSTRAINT PATIENT_PK PRIMARY KEY(PATIENT_ID));

【问题讨论】:

  • INT(100) 是什么?
  • 这是一个大整数,哈哈。
  • 您可能还应该使用varchar2()。为什么DOB 是字符串而不是日期?
  • @TheShaman:没有 DBMS,int(100) 将是一个“整数”
  • @a_horse_with_no_name 对不起,我很幽默。我唯一一次在 Ab Initio Metadata Portal 中看到过类似的情况,您可以在其中指定整数的位数。但是,是的,没有使用这种表示法的 DBMS。

标签: sql oracle sqldatatypes


【解决方案1】:

不知道为什么 Oracle 会给出错误消息而不是更有用的信息,但原因是应用于 INT 的精度,从 INT(100)INT(1000) 切换到 INT

CREATE TABLE Patient_T1(
  PATIENT_ID  INT NOT NULL,
  FIRST_NAME  VARCHAR(20) NOT NULL,
  LAST_NAME   VARCHAR(30) NOT NULL,
  DOB         CHAR(10)    NOT NULL,
  P_STREET_ADRESS VARCHAR(50) NOT NULL,
  PATIENT_CITY    VARCHAR(30) NOT NULL,
  PATIENT_STATE   CHAR(2) NOT NULL,
  PATIENT_ZIP  CHAR(5)    NOT NULL,
  PATIENT_PHONE CHAR(12)  NOT NULL,
  PATIENT_ROOM  INT NOT NULL,
  CONSTRAINT PATIENT_PK PRIMARY KEY(PATIENT_ID));

【讨论】:

    【解决方案2】:

    您的表格存在多个问题DDL

    • INT(100) - 在 Oracle 中,INTEGER 是一种 ANSI SQL 数据 类型,它指的是只有整数部分的数值,并且没有浮点数或小数部分。也就是说,INTEGER 只会存储整数

    • VARCHAR(20) - Oracle 强烈建议使用 VARCHAR2

    来自documentation

    VARCHAR 数据类型

    VARCHAR 数据类型与 VARCHAR2 数据类型同义。至 避免可能的行为变化,始终使用 VARCHAR2 数据类型 存储可变长度的字符串。

    • CHAR(10) - 更好地使用 VARCHAR2 因为 CHAR 被空白填充到固定长度。这是在浪费存储空间。

    来自documentation

    CHAR 数据类型

    CHAR 数据类型存储固定长度的字符串。如果你给一个 较短的值,然后将值填充为固定长度。

    只有问题#1 会抛出错误,无论如何修复上述所有问题都可以让您创建表。

    例如,

    SQL> 创建表 Patient_T1 2 ( 3 患者 ID 号不为空, 4 FIRST_NAME VARCHAR2(20) 非空, 5 LAST_NAME VARCHAR2(30) 非空, 6 出生日期不为空, 7 P_STREET_ADRESS VARCHAR2(50) 非空, 8 患者城市 VARCHAR2(30) 非空, 9 患者状态 VARCHAR2(2) 非空, 10 PATIENT_ZIP VARCHAR2(5) 非空, 11 患者电话 VARCHAR2(12) 非空, 12 患者房间号不为空, 13 约束 PATIENT_PK 主键(PATIENT_ID) 14); 表已创建。

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 2016-10-23
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多