0

I'm trying to execute the following 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', '');

..but i get this error : ORA-01861: literal does not match format string.

This error solved if i add the date format like this:

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', '');

I don't want to define the date format for each SQL statement, I want this format to be standard for all date fields in the database, without the need to define it,in other word the first SQL statement must run correctly without any errors.

Can I define the date format for oracle database, so no need to define it again with each SQL statement?

4

3 回答 3

6

这是思考编程的错误方式。隐式不好,显式好。如果您只是将字符串扔到数据列中并希望默认值按您的预期工作,那么您很可能会产生错误和性能问题。

但我绝不会妨碍获得问题的答案。

更改NLS_DATE_FORMAT初始化参数。

于 2011-02-04T21:05:33.703 回答
1

这是相当糟糕的 SQL。两个问题: 1)Oracle 将无法优化(每次运行查询都必须解析),使数据库操作变慢;2) 您对 SQL 注入攻击持开放态度。

使用带有准备好的语句的参数化查询要好得多,这将解决上述问题以及您的日期格式问题。

编辑:要直接回答您的问题,并且如果您真的不想切换到准备好的语句(您已被警告!),那么您可以这样做:

INSERT INTO X VALUES (99, TO_DATE('2010/02/04 16:30:00', 'YYYY/MM/DD HH24:MI:SS'));

但同样,由于上述原因,这是一个非常糟糕的主意

于 2011-02-04T20:52:50.943 回答
0

日期和时间文字的 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');
于 2011-02-04T21:17:15.747 回答