2015-11-16 6 views
0

Я пытаюсь создать таблицу в 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)); 
+2

Что такое 'INT (100)'? –

+1

Это большое целое число, lol. –

+1

Возможно, вы также должны использовать 'varchar2()'. И почему 'DOB' символьная строка, а не дата? –

ответ

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

Есть несколько проблемы с вашим столом DDL:

  • INT(100) - В Oracle ЦЕЛОЕ является ANSI данных SQL тип, который относится к числовым значениям, которые имеют лишь целую часть и не с плавающей точкой или десятичной части. То есть, INTEGER будет хранить только целых чисел ТОЛЬКО.

  • VARCHAR(20) - Oracle настоятельно рекомендует использовать VARCHAR2.

С documentation,

VARCHAR Datatype

VARCHAR тип данных является синонимом типа данных VARCHAR2. К избегать возможных изменений в поведении, всегда используйте тип данных VARCHAR2 для хранения строк символов переменной длины.

  • CHAR(10) - лучше использовать VARCHAR2, как CHAR дополняется пробелами до фиксированной длины. Это потеря памяти.

От documentation,

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. 
Смежные вопросы