我不是很喜欢数据库,我在尝试实现一个涉及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自动执行的不同数据格式之间没有某种自动转换?如何解决此问题并正确执行我的插入声明?
答案 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