为什么我无法执行这种简单的插入操作?如何解决此日期格式问题?

时间:2015-06-10 13:47:43

标签: sql database oracle oracle11g rdbms

我不是很喜欢数据库,我在尝试实现一个涉及Oracle数据库上 date 字段的简单插入查询时遇到以下问题。

所以我有一个名为 FLUSSO_XMLSDI 的表,它具有以下结构(这是select *的结果):

NUMERO_FATTURA    DATA_EMISSIONE    XML
-----------------------------------------------------------
2502064160        11-GEN-2014       some text
2502064161        15-GEN-2014       some text
2502064162        25-GEN-2014       some text

DATA_EMISSIONE 字段是 DATE 类型。

现在,我必须使用XML提取的值插入新记录,我这样做:

INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, 2015-06-16, 'TEST');

但是我对 DATA_EMISSIONE 字段有一些问题,因为我在尝试执行上一个查询时收到以下错误消息:

Errore con inizio alla riga 3 nel comando:
INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML) 
VALUES (2503985924, 2015-06-16, 'TEST') 
Errore alla riga del comando:4 Colonna:27
Report errori:
Errore SQL: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

正如您在选择操作中获得的数据中所见, DATA_EMISSIONE 字段包含以下格式的日期: 11-GEN-2014 ,但我尝试将其插入as 2015-06-16 (因为这是我的应用程序从XML获取此值的方式)

这是问题吗? Oracle自动执行的不同数据格式之间没有某种自动转换?如何解决此问题并正确执行我的插入声明?

2 个答案:

答案 0 :(得分:3)

确实,

2015-06-16是一个数字。具体来说,它是1993(2015减6减16)。

你需要做的是......

INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, date'2015-06-16', 'TEST');

...如果你想使用日期文字常量,或者(更可能,因为你从其他地方的XML获取这些数据)...

INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, to_date('2015-06-16', 'yyyy-mm-dd'), 'TEST');

...如果你想使用字符串值,可能来自绑定变量。

答案 1 :(得分:1)

您可以使用TO_DATE Oracle函数执行数据转换,例如

INSERT INTO FLUSSO_XMLSDI (NUMERO_FATTURA, DATA_EMISSIONE, XML)
VALUES (2503985924, TO_DATE('2015-06-16', 'yyyy-mm-dd'), 'TEST');

您可以找到有关此功能的更多信息here