我正在尝试执行以下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语句定义它吗?
答案 0 :(得分:6)
这是考虑编程的错误方法。隐含是坏的,显性是好的。如果您只是将字符串抛入数据列并希望默认值按预期工作,则很可能会产生错误和性能问题。
但是,对我来说,要避免得到这个问题的答案。
更改NLS_DATE_FORMAT初始化参数。
答案 1 :(得分: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'));
但同样,由于上述原因,这是一个非常糟糕的主意
答案 2 :(得分: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');