我试图在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));
答案 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 。
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.