Ответ 1
Попробуйте заменить строковый литерал на дату '1989-12-09'
на TO_DATE('1989-12-09','YYYY-MM-DD')
Я пытаюсь вставить данные в существующую таблицу и продолжать получать ошибку.
INSERT INTO Patient
(
PatientNo,
PatientFirstName,
PatientLastName,
PatientStreetAddress,
PatientTown,
PatientCounty,
PatientPostcode,
DOB,
Gender,
PatientHomeTelephoneNumber,
PatientMobileTelephoneNumber
)
VALUES
(
121,
'Miles',
'Malone',
'64 Zoo Lane',
'Clapham',
'United Kingdom',
'SW4 9LP',
'1989-12-09',
'M',
02086950291,
07498635200
);
Ошибка:
Error starting at line : 1 in command -
INSERT INTO Patient (PatientNo,PatientFirstName,PatientLastName,PatientStreetAddress,PatientTown,PatientCounty,PatientPostcode,DOB,Gender,PatientHomeTelephoneNumber,PatientMobileTelephoneNumber)
VALUES (121, 'Miles', 'Malone', '64 Zoo Lane', 'Clapham', 'United Kingdom','SW4 9LP','1989-12-09','M',02086950291,07498635200)
Error report -
SQL Error: ORA-01861: literal does not match format string
01861. 00000 - "literal does not match format string"
*Cause: Literals in the input must be the same length as literals in
the format string (with the exception of leading whitespace). If the
"FX" modifier has been toggled on, the literal must match exactly,
with no extra whitespace.
*Action: Correct the format string to match the literal.
Просто не знаю, почему это продолжается. Я изучаю SQL на данный момент, любая помощь будет принята с благодарностью!
Попробуйте заменить строковый литерал на дату '1989-12-09'
на TO_DATE('1989-12-09','YYYY-MM-DD')
Формат, который вы используете для даты, не соответствует формату даты Oracle по умолчанию.
При установке Oracle Database по умолчанию для ФОРМАТА ДАТЫ ПО УМОЛЧАНИЮ устанавливается значение dd-MMM-yyyy
.
Либо используйте функцию TO_DATE(dateStr, formatStr)
, либо просто используйте dd-MMM-yyyy
модель формата даты.
Вы также можете изменить формат даты для сеанса. Это полезно, например, в Perl DBI, где функция to_date() недоступна:
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'
Вы также можете установить стандартный файл nls_date_format по умолчанию:
ALTER SYSTEM SET NLS_DATE_FORMAT='YYYY-MM-DD'
В Perl DBI вы можете запускать эти команды с помощью метода do():
$db->do("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD');
http://www.dba-oracle.com/t_dbi_interface1.htm https://community.oracle.com/thread/682596?start=15&tstart=0
"SELECT ci.PARTY_NAME, sm.DC_No,ic.DC_DATE, sm.bill_no,sr.sales_DATE,sum(sm.QTY), 'Buyer' as issue_type " +
" FROM sales_register sr,customer_issue ci join ( SELECT ISSUE_DATE AS DC_DATE,issue_id FROM ISSUE UNION SELECT ISSUE_DATE,issue_id AS DC_DATE FROM CUSTOMER_ISSUE) IC on ic.issue_id=ci.issue_id " +
" join sales_mat_reg sm on ic.issue_id=sm.issue_id where ic.DC_DATE between to_date('"+from_date+"','DD-MON-YY') " +
" and to_date('"+to_date+"','DD-MON-YY') group by ci.PARTY_NAME, sm.DC_No, sm.bill_no, ic.DC_DATE, sr.sales_DATE,issue_type
literal does not match format string
попытайтесь сохранить дату, подобную этой yyyy-mm-dd hh: mm: ss.ms например: 1992-07-01 00: 00: 00.0 который работал у меня
ORA-01861: literal does not match format string
Это происходит потому, что вы пытались ввести литерал со строкой форматирования, но длина строки форматирования не была такой же, как у литерала.
Вы можете решить эту проблему, выполнив следующие изменения.
TO_DATE('1989-12-09','YYYY-MM-DD')
Как правило, если вы используете функцию TO_DATE, TO_TIMESTAMP функция, функция TO_CHAR и аналогичные функции, убедитесь, что предоставленный вами литерал соответствует строке формата, которую вы указанный
Попробуйте использовать формат dd-mon-yyyy, например 02-08-2016 должен быть в формате '08 -feb-2016 '.
Если вы предоставили правильный формат даты, он должен работать, пожалуйста, повторите проверку один раз, если вы дали правильный формат даты в значениях вставки