использование sysdate в таблице вызывает ошибку в недопустимом месяце

#sql #oracle

#sql #Oracle

Вопрос:

итак, я делал свою домашнюю работу, и таблица

 Create TABLE Book
(
bookID number(2,0) not null, 
title char(50) not null,
catID char(2),
copyrightYear number(2,0),
isbnNumber char(50),
publisherID char(2),
purchasePrice number(4,2),
coverType char(10),
datePurchased date default sysdate,
pages number(4,0)
)
  

и когда я вставляю дату внутрь, она становится ошибкой (не действительный месяц)

 Insert into Book 
values (1, 'Dirk Luchte', 'PS', 93, null,'NE', 23.50,'Hard', '23-nov-1993',1012);
  

и когда я пытаюсь использовать оператор to_date

 Insert into Book 
values (1, 'Dirk Luchte', 'PS', 93, null,'NE', 23.50,'Hard', to_date('23-nov-1993','DD-MM-YYYY'),1012);
  

весь oracle разбился на пустой, что я могу сделать?

Комментарии:

1. Вы используете MySQL или Oracle?

2. У MySQL даже нет to_date() функции. Какое имя вы можете прочитать в строке заголовка вашего менеджера баз данных?

3. Дата поступает откуда-то еще и, следовательно, должна быть в этом формате?

4. Я исключил отредактированный MySQL из вопроса. Слишком много битов только для Oracle.

5. ХОРОШО — если вы хотите указать дату в формате ’23 ноября 1993 года’, тогда модель будет ‘дд-пн-гггг’ (обратите внимание на «пн» посередине, который указывает месяц в символьном формате). Однако лучше указать его как ’23-11-1993′ и использовать вашу текущую модель ‘дд-мм-гггг’ (тогда вы не зависите от глупых вещей, таких как язык NLS). Затем: у вас есть sysdate в вашем названии; как это связано с вашим вопросом? Я нигде его не нахожу.

Ответ №1:

Вы можете использовать официальную документацию для своей домашней работы, это не считается мошенничеством (по крайней мере, не больше, чем запрос в Stack Overflow):

Модели форматирования

 Element   Specify in TO_* datetime functions?     Description
MM        Yes                                     Month (01-12; January = 01)
  

So nov явно не является числом от 1 до 12, следовательно, ошибка.

И, пожалуйста, научитесь не игнорировать сообщения об ошибках (вы даже не подумали о том, чтобы поделиться ими здесь): они здесь, чтобы помочь.


Что касается использования sysdate в таблице, вызывающей заголовок ошибки, вы в замешательстве. Значение по умолчанию вашего столбца не используется: вы присваиваете явное значение. Если вам нужно значение по умолчанию, вы должны исключить столбец. Это также означает, что вы должны предоставить список столбцов в своем запросе (что в любом случае является хорошей практикой, потому что ваше приложение не будет прерываться при добавлении новых столбцов).

Ответ №2:

Самый простой способ указать литерал даты — использовать формат ISO:

 DATE '1993-12-23'