![]() |
|
Программирование >> Oracle
Загрузка данных 483 строке (последним символом в поле COMMENTS является символ новой строки, поэтому кавычка и выдается в новой строке). Это произошло потому, что в каждой входной записи символ новой строки находится в позиции 101 и утилита SQLLDR не считает его разделителем записей. Если это не подходит, надо брать данные в кавычки и использовать конструкцию OPTIONALLY ENCLOSED BY, чтобы утилита SQLLDR загружала только данные в кавычках, без символа новой строки (не забудьте при этом добавить дополнительное место в каждой записи в атрибуте FIX). При этом завершающий символ новой строки не будет загружаться как часть данных. Итак, если изменить управляющий файл следующим образом: LOAD DATA INFILE demo18.dat fix 101 INTO TABLE DEFT REPLACE FIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY TRAILING NULLCOLS (DEPTNO, DNAME upper(:dname) , LOC upper(:loc) , LAST UPDATED my to date(:last updated) , COMMENTS и изменить файл данных так, чтобы он имел следующий вид: C:\sqlldr>TYPE demo18.dat 10,Sales,Virginia,01-april-2001, This is the Sales Office in Virginia 20,Accounting,Virginia,13/04/2001, This is the Accounting Office in Virginia 30,Consulting,Virginia,14/04/2001 12:02:02, This is the Consulting Office in Virginia 40,Finance,Virginia,987268297, This is the Finance Office in Virginia с текстом в кавычках, он будет загружен следующим образом: tkyte@TKYTE816> select comments comments from dept; COMMENTS This is the Sales Office in Virginia This is the Accounting Office in Virginia This is the Consulting Office in Virginia This is the Finance Office in Virginia Предупреждаю тех, кому повезло работать и в ОС Windows NT, и в ОС UNIX. На этих платформах признаки конца строки различны. В ОС UNIX это просто \n. В ОС 484 Глава 9 Windows NT это \r\n. Предположим, мы передали файлы из предыдущего примера с помошью ftp-клиента на UNIX-машину. Если выполнить затем процедуру FILE DUMP, можно понять, с какой проблемой придется столкнуться: ops$tkyte@ORA8I.WORLD> EXXEC file dump(MY FILES, demo17.dat); 000001-000015 000016-000030 000031-000045 000046-000060 000061-000075 000076-000090 000091-000105 000106-000120 000121-000135 000136-000150 000151-000165 000166-000180 000181-000195 000196-000210 000211-000225 000226-000240 000241-000255 000256-000270 000271-000285 000286-000300 000301-000315 000316-000330 000331-000345 000346-000360 000361-000375 000376-000390 000391-000405 10, Sales, Virgin ia,0 1-april-200 1, T h i s is the S ales \n Office in Virginia \n 2 0 , Ace ounting ,Virgini a, 13/04/2001, Th is is the Acco u nting\n Office in Virginia \n3 0,Consultin g, Virginia, 14/0 4/2001 12:02:02 ,This is the Co nsulting\n Office in Virginia \n 4 0 Pi nance, Virgini a, 987268297, Thi s is the Financ e\n Office in Vir g i n ia PL/SQL procedure successfully completed. Файл имеет другой размер, как и записи в нем. Каждая пара \r\n теперь представлена символом \n. В этом примере достаточно изменить значение атрибута FIX с 101 на 99, но только потому, что в каждой записи одинаковое количество строк! Длина каждой записи просто сократилась на 2 байта. Если бы в некоторых записях было три строки, их длина сократилась бы на три, а не на два байта. При этом файл изменился бы так, что записи не имели бы больше фиксированной длины. При использовании атрибута FIX убедитесь, что файл создается и загружается на однородных платформах (UNIX и UNIX, или Windows и Windows). При передаче файлов с одной из этих систем на другую они наверняка перестанут загружаться. Использование атрибута VAR Еще один метод загрузки данных со встроенными символами новой строки - с помощью атрибута VAR. При использовании этого формата каждая запись начинается с фиксированного количества байтов, в которых указана ее суммарная длина. С помощью Загрузка данных 485 этого формата можно загружать записи переменной длины, содержащие символы новой строки, но только если в начале каждой записи указана ее длина. Итак, если использовать управляющий файл следующего вида: LOAD DATA INFILE demo19.dat var 3 INTO TABLE DEPT REPLACE FIELDS TERMINATED BY , TRAILING NULLCOLS (DEPTNO, DNAME upper(:dname) , LOC upper(:loc) , LAST UPDATED my to date(:last updated) , COMMENTS то атрибут var 3 будет означать, что первые три байта каждой входной записи содержат ее длину. Если взять файл данных следующего вида: C:\sglldr>type demol9.dat 07110,Sales,Virginia,01-april-2001,This is the Sales Office in Virginia 0762:0, Accounting,Virginia, 13/04/2001,This is the Accounting Office in Virginia 08730,Consulting,Virginia,14/04/2001 12 :02:02,This is the Consulting Office in Virginia 07140,Finance,Virginia,987268297,This is the Finance Office in Virginia то их можно успешно загрузить с помощью представленного управляющего файла. В этом файле загружаемых данных четыре записи. Первая запись начинается с 071, т.е. следующим 71 байт представляет первую запись. В эти 71 байт входит и завершающий символ новой строки после слова Virginia. Следующая запись начинается с 078. В ней 78 байт, и так далее. Используя файл данных такого формата, очень легко загрузить данные со встроенными символами новой строки. И в этом случае, если приходится работать с UNIX и NT (показан пример для NT, где новая строка представлена двумя символами), надо уточнять длину каждой записи. В ОС UNIX представленный выше файл данных придется изменить, задав 69, 76, 85 и 69 в качестве длины записей. Использование атрибута STR Это, наверное, самый гибкий метод загрузки данных, содержащих символы новой строки. С помощью атрибута STR можно задать новую последовательность символов, представляющую конец строки. Это позволяет создать файл данных, в котором конец каждой записи помечен какими-либо специальными символами, и символ новой строки при этом теряет свое значение. Я предпочитаю использовать несколько символов, специальный маркер, а затем символ новой строки. Это упрощает поиск конца записи при просмотре файла данных в
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |