Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
Cyber Craft
Member

Откуда:
Сообщений: 180
Всем привет.

Windows XP SP2, Oracle 10g XE, APEX 3.0.1.
csv-файл формируется стандартным экспортом в приложении APEX, где TERMINATED BY ',' и OPTIONALLY ENCLOSED BY '"'. При заливке этого csv-файла с помощью sqlldr на двух компьютерах все проходит как по маслу. Вот ее код:

LOAD DATA
CHARACTERSET UTF8
INFILE "pmd_documents.csv"
INTO  TABLE PMD_DOCUMENTS_load
REPLACE
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
DOC_NO,
PROD_TYPE,
ACCT_POINT,
VALUE_DATE DATE 'DD.MM.YY',
SENDER_ACCT_NO,
SENDER_BIC,
SENDER_NAME,
SENDER_INN,
BENEF_BIC,
BENEF_CORR_ACCT,
BENEF_ACCT_NO,
BENEF_NAME,
BENEF_INN,
NOMINATION,
AMOUNT "REPLACE(:AMOUNT, ',', '.')",
YES,
YES_USER,
YES_DATE DATE 'DD.MM.YY',
USER_NAME,
MODIFY_DATE DATE 'DD.MM.YY',
KNF_CODE,
DEPT_ID)

На третьем компьютере точно по такому же сценарию импортируем, и некоторые записи не вводятся. Не вводятся те записи, которые имеют в поле AMOUNT дробную часть. Те записи, где поле AMOUNT имеет только целое число, проходят. В log-файле пишет, что INVALID NUMBER.
Проблема: не работает только на третьем компьютере и только в тех записях, где AMOUNT имеет дробную часть.
Вопрос: Как мне решить эту проблему??? Проблемы в настройках Windows, клиентской части Oracle или в чем?

Заранее благодарен.

Сообщение было отредактировано: 27 сен 07, 12:50
27 сен 07, 12:47    [4723400]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
Cyber Craft
Member

Откуда:
Сообщений: 180
Поиск не помогло.
В части AMOUNT пробовал на третьем компьютере:
1) AMOUNT "TO_NUMBER(:AMOUNT, '999999999999.99')";
2) AMOUNT "TO_NUMBER(:AMOUNT, '999999999999,99')";
3) AMOUNT "TO_CHAR(:AMOUNT, '999999999999.99')";
4) AMOUNT "TO_CHAR(:AMOUNT, '999999999999,99')"

Все равно не помогает.
27 сен 07, 12:50    [4723428]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8136
Какие сообщения в протоколе загрузки?
Что дает такой SELECT на этих разных компьютерах?
SELECT * FROM nls_session_parameters
WHERE parameter = 'NLS_NUMERIC_CHARACTERS';
27 сен 07, 12:52    [4723442]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
AMOUNT decimal external  "to_number(:AMOUNT, '999999999999D99', 'nls_numeric_characters='', ''')"


Сообщение было отредактировано: 27 сен 07, 12:54
27 сен 07, 12:53    [4723452]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8136
Можно попробовать:
AMOUNT CHAR(20) "REPLACE(:AMOUNT, ',', '.')",
27 сен 07, 12:54    [4723460]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
Elic
Member

Откуда:
Сообщений: 29991
SQL*Plus
Cyber Craft
AMOUNT          "REPLACE(:AMOUNT, ',', '.')",

  AMOUNT CHAR(20) "REPLACE(:AMOUNT, ',', '.')",
27 сен 07, 12:57    [4723479]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при заливке csv-файла в таблицу с помощью sqlldr  [new]
Cyber Craft
Member

Откуда:
Сообщений: 180
Denis Popov
AMOUNT decimal external  "to_number(:AMOUNT, '999999999999D99', 'nls_numeric_characters='', ''')"


Все, на третьем компьютере заработала. Помог вот этот код Дениса Попова. Спасибо.
28 сен 07, 07:22    [4727967]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить