определить формат даты для базы данных в оракуле - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь выполнить следующий SQL:

INSERT INTO "x" 
   ("x_id", "requested_function", "user_action", "t_users_id", "date", "wf_process", "details") 
VALUES 
   ('66', 'index', 'view', '1', '2011-02-04 22:14:19', '15', '');

.. но я получаю эту ошибку: ORA-01861: литерал не соответствует строке формата.

Эта ошибка устраненаесли я добавлю формат даты следующим образом:

INSERT INTO "x" 
  ("x_id", "requested_function", "user_action", "t_users_id", "date", "wf_process", "details") 
VALUES 
  ('66', 'index', 'view', '1',to_date('2011-02-04 22:14:19','yyyy-mm-dd hh24:mi:ss'), '15', '');

Я не хочу определять формат даты для каждого оператора SQL, я хочу, чтобы этот формат был стандартным для всех полей даты в базе данных, безнеобходимо определить его, другими словами, первый оператор SQL должен работать без ошибок.

Могу ли я определить формат даты для базы данных Oracle, поэтому нет необходимости определять его снова с каждым оператором SQL?

Ответы [ 3 ]

6 голосов
/ 05 февраля 2011

Это неправильный способ думать о программировании.Неявное - это плохо, явное - это хорошо.Если вы просто добавляете строку в столбец данных и надеетесь, что по умолчанию все работает так, как вы ожидаете, вы, скорее всего, будете создавать ошибки и проблемы с производительностью.

Но я не могу получить ответ на вопрос.

Измените параметр инициализации NLS_DATE_FORMAT .

1 голос
/ 04 февраля 2011

Это довольно плохой SQL.Две проблемы: 1) Oracle не сможет оптимизировать (придется анализировать каждый раз, когда вы выполняете запрос), что замедляет работу базы данных;и 2) Вы открыты для атак с использованием SQL-инъекций.

Гораздо лучше использовать параметризованные запросы с подготовленными операторами, что решит как вышеуказанные проблемы, так и проблему форматирования даты.* РЕДАКТИРОВАТЬ: Чтобы напрямую ответить на ваш вопрос, и если вы действительно не хотите переходить к подготовленным высказываниям (вас предупредили!), Вы можете сделать что-то вроде этого:Но опять же, это очень плохая идея по причинам, указанным выше

0 голосов
/ 05 февраля 2011

Стандарт SQL92 для литералов даты и времени - это то, что нужно.

TIMESTAMP 'YYYY-MM-DD HH:MM:SS'
DATE 'YYYY-MM-DD'
TIME 'HH:MM:SS'

Примером его использования будет:

INSERT INTO X VALUES (99, TIMESTAMP '2010-02-04 16:30:00');
...