2016-10-10 5 views
2

Пожалуйста, сообщите почему я получаю сообщение об ошибке в ниже qracle вставки qquery beow является то запросне в состоянии успешно вставить данные в таблицу БД Oracle

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) 

ошибка, что я получаю

 
Error report: 
SQL Error: ORA-01843: not a valid month 
01843. 00000 - "not a valid month" 
*Cause:  
*Action: 

Просто для справки структура таблицы

 
Name       Null  Type                    
ID        NOT NULL NUMBER(32)      
VERSION      NOT NULL NUMBER(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)      
UPDATEDDATE        TIMESTAMP(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)      
ENTITY       NOT NULL VARCHAR2(50)      
PRODUCT      NOT NULL VARCHAR2(50)      
BROKER_INV_REF       VARCHAR2(50)      
ASSIGNEE        VARCHAR2(50)      
RECEIPT_DATE       TIMESTAMP(6)      
TRADE_COUNT        NUMBER        
GST_PCT         NUMBER(25,5)      
IS_GST_APPLIED       CHAR(1)       
PARENT_INVO_ID       NUMBER(32)       
DISCOUNT        NUMBER(25,5)      
MANUAL_INDICATOR      CHAR(1)       
MANUAL_REFERENCE      VARCHAR2(100)      
PAYMENT_REFERENCE      VARCHAR2(100)      
QUERY_ASSIGNMENT      VARCHAR2(100)      
REMARKS         VARCHAR2(500)      
ATTACHMENT_ID       NUMBER(32)       
EMAIL_ID        NUMBER(32)       
GROSS_AMOUNT     NOT NULL NUMBER(25,5)       
+0

Вы пытаетесь вставить строковые значения в поля даты. Если эти строковые значения не совпадают с вашим форматом даты NLS, вы получите эту ошибку. – Tibrogargan

ответ

0

'10 October 2016', '2016-10-10 03:51:15' и '2016-10-10 03:51:15' - это строки. Поскольку ваши столбцы время от времени, как и должно быть, Oracle необходимо преобразовать ваши строки и попробовать это как можно лучше, учитывая текущие настройки. Скорее всего, дело в том, что Oracle понимает ваши форматы или нет.

Использование ANSI DateTime литералы вместо:

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

. Запросите yo, чтобы отправить окончательную qery, чтобы я мог понять, пожалуйста, –

+0

. Если вы «10 октября 2016 года» сделаете эту «дату» 2016-10- 10''. Где у вас '' 2016-10-10 03: 51: 15'' сделать эту метку времени 2016-10-10 03: 51: 15''. Простой поиск и замена. –

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) 
+1

В 'to_date ('10 October 2016 ',' dd month yyyy ')' вы должны добавить параметр для nls_date_lang_language, например. 'to_date ('10 октября 2016 ',' dd month yyyy ',' nls_date_language = american ')', чтобы не зависеть от того, установлен ли сеанс на английском. –

+0

@ThorstenKettner спасибо –

+1

Пожалуйста, будьте готовы. Существует еще одно появление «10 октября 2016 года» в списке значений (для 'RECEIPT_DATE'). –