Как добавить временной запрос в Oracle?

avatar
user24529
8 апреля 2018 в 08:32
77
2
2
CREATE TABLE Appointment

(

appointID INTEGER,

appoint_date DATE,

appoint_time  TIME,

appoint_type VARCHAR(5),

primary key (appointID)

);

INSERT INTO Appointment VALUES(1, '15-Apr-2017', '10:00', 'long');

INSERT INTO Appointment VALUES(2, '15-Apr-2017', '10:30', 'short');

INSERT INTO Appointment VALUES(3, '28-May-2017', '14:00', 'long');

INSERT INTO Appointment VALUES(4, '20-May-2017', '15:00', 'short');

INSERT INTO Appointment VALUES(5, '11-May-2017', '10:30', 'long');

INSERT INTO Appointment VALUES(6, '26-Jun-2017', '9:30', 'short');

INSERT INTO Appointment VALUES(7, '30-Jun-2017', '14:00', 'long');

INSERT INTO Appointment VALUES(8, '30-Jun-2017', '15:30', 'short');

INSERT INTO Appointment VALUES(9, '28-Apr-2017', '16:00', 'short');

INSERT INTO Appointment VALUES(10,'30-Apr-2017', '13:00', 'short');

Я продолжаю получать эту ошибку, когда пытаюсь добавить ВРЕМЯ:

Error starting at line : 24 in command -

CREATE TABLE Appointment(

appointID INTEGER,

appoint_date DATE,

appoint_time  TIME,

appoint_type VARCHAR(5),

primary key (appointID)

)

Error report -

ORA-00902: invalid datatype

00902. 00000 -  "invalid datatype"

*Cause:    
*Action:

Я также пытаюсь добавить свою таблицу DOCTOR TABLE, но постоянно получаю сообщение об ошибке

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:**

create table Doctor

(

    appointID   INTEGER     not null,

    regnum  CHAR(6),   

    doc_name    VARCHAR(40),

    doc_gender  CHAR(1),

    qual    VARCHAR(80),   

    foreign key (appointID) references Appointment

    primary key (appointID, regnum)

);
Источник

Ответы (2)

avatar
Littlefoot
8 апреля 2018 в 09:19
1

Вот мое предложение: избегайте типа данных CHAR, если это не имеет смысла (например, gender, как вы сделали), а также VARCHAR >>> вместо этого используйте VARCHAR2 (лично, Я никогда не использую CHAR и никогда не использовал VARCHAR).

DATE содержит компоненты даты и времени, поэтому вы можете безопасно его использовать.

Столбцы, создающие ограничение первичного ключа, не обязательно должны иметь указанное ограничение NOT NULL, поскольку первичные ключи в любом случае не допускают пустых значений.

Итак, вот он, рабочий пример:

SQL> create table appointment
  2    (appointid    integer constraint pk_app primary key,
  3     appoint_date date,
  4     appoint_type varchar2(5)
  5    );

Table created.

SQL>
SQL> insert into appointment values
  2    (1, to_date('15.04.2017 10:00', 'dd.mm.yyyy hh24:mi'), 'long');

1 row created.

SQL>
SQL> create table doctor
  2    (appointid   integer constraint fk_doc_app references appointment (appointid),
  3     regnum      varchar2(6),
  4     doc_name    varchar2(40),
  5     doc_gender  char(1),
  6     qual        varchar2(80),
  7     --
  8     constraint pk_doc primary key (appointid, regnum)
  9    );

Table created.

SQL>
Jacob
8 апреля 2018 в 10:27
0

Хороший ответ, пожалуйста, укажите, почему OP также получает сообщение об ошибке.

Littlefoot
8 апреля 2018 в 10:30
0

Из-за отсутствия запятой в конце этой строки: foreign key (appointID) references Appointment, @user75ponic (если вы об этом спрашивали).

Jacob
8 апреля 2018 в 10:31
0

OP использовал TIME как datatype, которого нет в Oracle, если я не ошибаюсь.

Littlefoot
8 апреля 2018 в 10:33
0

@ user75ponic, Рехан уже сказал это в своем ответе; это все еще стоит, так что ... да, я согласен, и вы не ошибаетесь :)

avatar
Rehan Azher
8 апреля 2018 в 08:41
0

Нет типа данных с именем "ВРЕМЯ", вы можете использовать метку времени:

CREATE TABLE Appointment
(
appointID INT,
appoint_date DATE,
appoint_time timestamp ,
appoint_type VARCHAR(5),
primary key (appointID)
);

Для вставки вы должны использовать функции TO_DATE и TO_TIMESTAMP, так как вы вставляете строку.:

INSERT INTO Appointment VALUES(3, To_date('15-Apr-2017','DD-MON-YY'), TO_TIMESTAMP('10:00','HH24:MI'), 'long');

http://sqlfiddle.com/#!4/59f5ef

user24529
8 апреля 2018 в 08:45
0

Спасибо, теперь я получаю сообщение об ошибке недопустимого месяца, когда пытаюсь вставить данные в таблицу назначений. Есть идеи, как это исправить? Спасибо

Rehan Azher
8 апреля 2018 в 09:04
0

Можете ли вы дать вывод этого: SELECT * FROM nls_session_parameters WHERE parameter = 'NLS_DATE_LANGUAGE'

Rehan Azher
8 апреля 2018 в 09:10
0

Обновленный ответ выше.

Jacob
8 апреля 2018 в 10:45
0

Хороший ответ @RehanAzher