为什么我不能执行这个简单的插入操作?我该如何解决这个日期格式问题?

Why I can't perform this simple insert operation? How can I solve this date format issue?

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

所以我有一个名为 FLUSSO_XMLSDI 的 table,它具有以下结构(这是 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:

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

是这个问题吗? Oracle 不会自动执行某种不同数据格式之间的自动转换吗?我怎样才能解决这个问题并正确执行我的插入语句?

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

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

您可以使用TO_DATE Oracle 函数进行数据转换,像这样

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

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