【问题标题】:Not able to successfully insert the data into the oracle db table无法成功将数据插入到 oracle db 表中
【发布时间】:2017-02-18 11:06:57
【问题描述】:

请告知为什么我在下面的 qracle 插入 qquery 下面是查询时出错

insert into RT_INVOICE (VERSION, PART_ID_BROKER, EMAIL_ID, ATTACHMENT_ID, INITIAL_AMOUNT, CURRENT_AMOUNT, GROSS_AMOUNT, 
RECEIVED_DATE, COMMITTED_DATE, CREATEDDATE, UPDATEDDATE, SETTLEMENT_DATE, CURR_ISO_CODE, WQTY_CODE_CURRENT, 
BROKER_REFERENCE, CREATED_BY, ENTITY, PRODUCT, BROKER_INV_REF, ASSIGNEE, RECEIPT_DATE, TRADE_COUNT, GST_PCT, 
IS_GST_APPLIED, SOURCE_SYSTEM, DISCOUNT, MANUAL_INDICATOR, MANUAL_REFERENCE, PAYMENT_REFERENCE, QUERY_ASSIGNMENT,
Remarks, PARENT_INVO_ID, INVOICE_MONTH, ID) values (0, 40158334066, 0, 0, 22.0, 22.0, 22.0, '10 October 2016',
null, '2016-10-10 03:51:15', '2016-10-10 03:51:15', null, 'HKD', 'BrokerageManualReconciliationWFQueue',
'IRDOCT169694', 'bro_admin', 'PLC LONDON', 'IRD', 'wwwqqsd', '', '10 October 2016', 0, 0.0, 'false', 'GDS', 0.0, 
'true', null, null, null, null, null, '2016-10', 13093090)

我得到的错误是

错误报告: SQL 错误:ORA-01843:不是有效月份 01843. 00000 - “不是一个有效的月份” *原因: *行动:

表结构仅供参考

名称空类型 ID 非空数字 (32) 版本号不为空 (20) PART_ID_BROKER NOT NULL NUMBER(32) INITIAL_AMOUNT NOT NULL NUMBER(25,5) CURR_ISO_CODE VARCHAR2(20) CURRENT_AMOUNT NOT NULL NUMBER(25,5) SETT_ID NUMBER(32) RECEIVED_DATE NOT NULL DATE COMMITTED_DATE DATE SETTLEMENT_DATE DATE CREATEDDATE NOT NULL TIMESTAMP(6) 更新日期时间戳(6) WQTY_CODE_CURRENT NOT NULL VARCHAR2(100) BROKER_REFERENCE VARCHAR2(100) CREATED_BY NOT NULL VARCHAR2(30) SOURCE_SYSTEM NOT NULL VARCHAR2(20) INVOICE_MONTH VARCHAR2(30) 实体非空 VARCHAR2(50) 产品非空 VARCHAR2(50) BROKER_INV_REF VARCHAR2(50) 受让人 VARCHAR2(50) RECEIPT_DATE TIMESTAMP(6) TRADE_COUNT NUMBER GST_PCT NUMBER(25,5) IS_GST_APPLIED CHAR(1) PARENT_INVO_ID 号码 (32) 折扣号码(25,5) MANUAL_INDICATOR CHAR(1) MANUAL_REFERENCE VARCHAR2(100) PAYMENT_REFERENCE VARCHAR2(100) QUERY_ASSIGNMENT VARCHAR2(100) 备注 VARCHAR2(500) ATTACHMENT_ID 编号 (32) EMAIL_ID NUMBER(32) GROSS_AMOUNT NOT NULL NUMBER(25,5)

【问题讨论】:

  • 您正在尝试将字符串值插入日期字段。除非这些字符串值与您的 NLS 日期格式匹配,否则您将收到此错误

标签: sql oracle


【解决方案1】:

要将字符串转换为日期,请尝试使用 to_date 函数:

insert into RT_INVOICE (VERSION, PART_ID_BROKER, EMAIL_ID, ATTACHMENT_ID, INITIAL_AMOUNT, CURRENT_AMOUNT, GROSS_AMOUNT, 
RECEIVED_DATE, COMMITTED_DATE, CREATEDDATE, UPDATEDDATE, SETTLEMENT_DATE, CURR_ISO_CODE, WQTY_CODE_CURRENT, 
BROKER_REFERENCE, CREATED_BY, ENTITY, PRODUCT, BROKER_INV_REF, ASSIGNEE, RECEIPT_DATE, TRADE_COUNT, GST_PCT, 
IS_GST_APPLIED, SOURCE_SYSTEM, DISCOUNT, MANUAL_INDICATOR, MANUAL_REFERENCE, PAYMENT_REFERENCE, QUERY_ASSIGNMENT,
Remarks, PARENT_INVO_ID, INVOICE_MONTH, ID) values (0, 40158334066, 0, 0, 22.0, 22.0, 22.0, to_date('10 October 2016', 'dd month yyyy', 'nls_date_language = american') ,
null, to_date('2016-10-10 03:51:15', 'yyyy-mm-dd hh24:mi:ss'), to_date('2016-10-10 03:51:15', 'yyyy-mm-dd hh24:mi:ss'), null, 'HKD', 'BrokerageManualReconciliationWFQueue',
'IRDOCT169694', 'bro_admin', 'PLC LONDON', 'IRD', 'wwwqqsd', '', to_date('10 October 2016', 'dd month yyyy', 'nls_date_language = american'), 0, 0.0, 'false', 'GDS', 0.0, 
'true', null, null, null, null, null, '2016-10', 13093090)

【讨论】:

  • to_date('10 October 2016', 'dd month yyyy') 你应该为 nls_date_lang_language 添加一个参数,例如to_date('10 October 2016', 'dd month yyyy', 'nls_date_language = american') 为了不依赖会话设置为英语。
  • 不客气。顺便说一下,值列表中还有一个'10 October 2016'(对于RECEIPT_DATE)。
  • 之前的metnitoned查询抛出错误命令行错误:1,102列:71错误报告:SQL错误:ORA-00907:缺少右括号00907。00000-“缺少右括号”
【解决方案2】:

'10 October 2016''2016-10-10 03:51:15''2016-10-10 03:51:15' 是字符串。由于您的列应该是日期时间,因此 Oracle 需要转换您的字符串,并根据您当前的设置尽可能地尝试此操作。 Oracle 是否理解您的格式或多或少是运气问题。

改用 ANSI 日期时间文字:

date '2016-10-10', null, timestamp '2016-10-10 03:51:15', timestamp '2016-10-10 03:51:15'

【讨论】:

  • 请求你发布最后的问题,以便我掌握
  • 你在哪里有'10 October 2016' 让这个date '2016-10-10'。在你有'2016-10-10 03:51:15' 的地方做这个timestamp '2016-10-10 03:51:15'。简单的搜索和替换。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2019-02-06
  • 2021-11-14
  • 1970-01-01
  • 2019-06-09
  • 2020-06-13
  • 2011-08-05
相关资源
最近更新 更多