缺少右括号错误?

时间:2015-11-16 02:34:13

标签: sql oracle sqldatatypes

我试图在sqldeveloper中创建一个表但是当没有错过正确的parenthises时,我一直得到一个错过的右括号错误。对此的任何修复或我只是试图以错误的方式创建表?

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

您的表 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> CREATE TABLE Patient_T1
  2    (
  3      PATIENT_ID NUMBER NOT NULL,
  4      FIRST_NAME VARCHAR2(20) NOT NULL,
  5      LAST_NAME VARCHAR2(30) NOT NULL,
  6      DOB DATE NOT NULL,
  7      P_STREET_ADRESS VARCHAR2(50) NOT NULL,
  8      PATIENT_CITY VARCHAR2(30) NOT NULL,
  9      PATIENT_STATE VARCHAR2(2) NOT NULL,
 10      PATIENT_ZIP   VARCHAR2(5) NOT NULL,
 11      PATIENT_PHONE VARCHAR2(12) NOT NULL,
 12      PATIENT_ROOM  NUMBER NOT NULL,
 13      CONSTRAINT PATIENT_PK PRIMARY KEY(PATIENT_ID)
 14    );

Table created.
相关问题