ORA-00902:无效的数据类型00902。00000-“无效的数据类型”

问题描述 投票:0回答:1

这是我在Oracle中创建的最后一个表,但是我不确定该表的错误在哪里。

CREATE TABLE PATIENTAPPOINTMENT(
APPOINTMENT_NUM VARCHAR (30) PRIMARY KEY,
STAFF_NUM VARCHAR (30) NOT NULL,
PATIENT_NUM VARCHAR (30) NOT NULL,
PROVIDER_NUM VARCHAR (30) NOT NULL,
APPOINTMENTDATE DATE NOT NULL,
APPOINTMENTTIME TIME NOT NULL,
EXAMROOMNUM VARCHAR (30) NOT NULL,
CONSTRAINT STAFFS_FK FOREIGN KEY(STAFF_NUM) REFERENCES STAFFS (STAFF_NUM),
CONSTRAINT PATIENT_FK FOREIGN KEY (PATIENT_NUM) REFERENCES PATIENT (PATIENT_NUM),
CONSTRAINT LOCAL_DOCTORS_FK FOREIGN KEY (PROVIDER_NUM) REFERENCES LOCALDOCTORS (PROVIDER_NUM));

This is the error information given

oracle oracle-sqldeveloper
1个回答
0
投票

Oracle中没有TIME数据类型(对于appointmenttime列)。 DATE数据类型同时包含日期和时间,例如

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE
-------------------
28.03.2020 20:44:59

这意味着appointmentdate DATE可以。


除此之外,一切正常:

SQL> CREATE TABLE STAFFS (STAFF_NUM VARCHAR(30) PRIMARY KEY);

Table created.

SQL> CREATE TABLE PATIENT (PATIENT_NUM VARCHAR(30) PRIMARY KEY);

Table created.

SQL> CREATE TABLE LOCALDOCTORS (PROVIDER_NUM VARCHAR(30) PRIMARY KEY);

Table created.

SQL> CREATE TABLE PATIENTAPPOINTMENT(
  2  APPOINTMENT_NUM VARCHAR (30) PRIMARY KEY,
  3  STAFF_NUM VARCHAR (30) NOT NULL,
  4  PATIENT_NUM VARCHAR (30) NOT NULL,
  5  PROVIDER_NUM VARCHAR (30) NOT NULL,
  6  APPOINTMENTDATE DATE NOT NULL,
  7  --APPOINTMENTTIME TIME NOT NULL,  --> wrong
  8  EXAMROOMNUM VARCHAR (30) NOT NULL,
  9  CONSTRAINT STAFFS_FK FOREIGN KEY(STAFF_NUM) REFERENCES STAFFS (STAFF_NUM),
 10  CONSTRAINT PATIENT_FK FOREIGN KEY (PATIENT_NUM) REFERENCES PATIENT (PATIENT_NUM),
 11  CONSTRAINT LOCAL_DOCTORS_FK FOREIGN KEY (PROVIDER_NUM) REFERENCES LOCALDOCTORS (PROVIDER_NUM));

Table created.

SQL>

except,因为您应该使用varchar2,而不是varchar。为什么?因为Oracle建议这样做。


0
投票

TIME不是数据类型,请使用DATE。

Oracle中支持VARCHAR,但不建议使用VARCHAR2。

© www.soinside.com 2019 - 2024. All rights reserved.