|
EНПКО Мекомп при Минчермете СССРF
E SQL * LOADER РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Версия 1.0 F
EORACLE
Система управления реляционной БД F
E SQL*Loader.Руководство пользователя.F
ORACLE часть N.3606-V1.0
Copyright 1986,1987 Корпорация Oracle,Белмонт,
Калифорния,США.
Все права сохраняются.Отпечатано в США.
Дата: 13 июня 1987г.
Авторы: Рита Моран,Шелли Диммик
Соавторы: Дэйв Симсон,Кен Джекобс
Авторские права.
Использование,копирование или изложение подчиняются огра-
ничениям,указанным в вашем контракте с Корпорацией ORACLE.
Использование,копирование или изложение со стороны прави-
тельства подчиняются ограничениям,установленным в подраз-
деле (b)(3)(ii) авторских прав в области Технических Данных
и Программного обеспечения в документе 48 CFR 252.227-7013.
Информация,содержащаяся в данном документе,м.б. из-
менена без предупреждения.Если у вас возникли трудности с
документацией,сообщите нам в письменном виде.Корпорация
ORACLE не гарантирует,что в этой документации отсутствуют
ошибки.
ORACLE-зарегистрированная торговая марка Корпорации ORACLE.
SQL*Loader - торговая марка Корпорации ORACLE.
E СОДЕРЖАНИЕF
EПредисловие ...............................................F
Аудитория........................................
Как организовано это руководство.................
Как использовать это руководство.................
Публикации,связанные с этим документом..........
Соглашения,используемые в этом руководстве......
Ваши замечания приветствуются...................
E ГЛАВА 1 Введение......................................F
Что такое SQL*Loader............................
Установка SQL*Loader............................
Входная информация SQL*Loader...................
Управляющий файл (control file)...............
Данные........................................
Двоичный и символьный форматы...............
Фиксированный и переменный форматы..........
Логические и физические записи..............
Подготовка БД..........................
Выходная информация SQL*Loader..................15
Файл отчета (log file)........................15
Файл отброшенных записей (bad file)...........17
Файл пропущенных записей (discard file).......18
E ГЛАВА 2 Примеры использования SQL*Loader................19F
Описание примеров...............................20
Пример 1: Загрузка данных переменной длины....21
Пример 2: Загрузка записей фиксированного
формата.......................................24
Пример 3: Загрузка файла в свободном формате..28
-3-
Пример 4: Загрузка нескольких физических
записей как одной логической записи...........32
Пример 5: Загрузка данных нескольких таблиц...36
E ГЛАВА 3 Синтаксис командной строки......................42F
Команда SQLLОАD.................................43
Аргументы командной строки......................45
Использование ключевого слова OPTIONS
в управляющем файле.............................48
Сообщения,выдаваемые SQL*Loader................49
E ГЛАВА 4 Синтаксис управляющего файла....................50F
Создание управляющего файла.....................51
Синтаксис оператора LOAD DATA...................51
Указание файла данных.........................54
Имя файла...................................54
Режим чтения файла..........................54
Указание нескольких файлов данных.............55
Указание файла отброшенных записей............56
Указание файла пропущенных записей............57
Ограничение числа пропущенных записей.......59
Перезапись или добавление записей
в существующую таблицу........................59
Установка максимальной длины логических
записей.......................................60
Формирование логической записи из нескольких
физических....................................61
Определение таблиц и колонок..................64
Указание имен таблиц........................64
Выбор записей для загрузки..................65
Указание условия для поля...................65
Указание терминатора данных.................66
Определение колонок.........................66
Установка значения колонки к константе......67
Установка значения колонки к номеру записи
в файле данных..............................67
Формирование уникального последовательного
номера......................................68
Указание позиции поля данных................69
Указание длины данных.......................70
Указание типа входных данных................70
Тип данных CHAR.............................71
Тип данных DATE.............................71
Тип данных VARCHAR..........................71
Тип данных SMALLINT.........................72
-4-
Тип данных INTEGER..........................72
Тип данных FLOAT............................72
Тип данных DOUBLE...........................72
Тип данных DECIMAL..........................72
Тип данных числовой EXTERNAL................73
Тип данных GRAPHIC..........................73
Тип данных VARGRAPHIC.......................74
Определение символьных данных с
ограничителями..............................74
Определение пустых колонок..................75
Установка числовых колонок в ноль...........75
Указание начала данных в управляющем файле....76
E ПРИЛОЖЕНИЕ А Предупреждения и сообщения об
ошибках SQL*Loader..............................77F
Коды 100-199: Ошибки командной строки...........78
Коды 200-299: DB2,синтаксические ошибки и
информационные сообщения........................79
Коды 300-399: Синтаксические ошибки
в управляющем файле.............................79
Коды 400-499: Логические ошибки
(синтаксис верный)..............................80
Коды 500-599: Ошибки при открытии и чтении
файлов..........................................80
Коды 600-699: Ошибки,возникшие при загрузке....81
Коды 620-639: Ошибки формата....................81
Коды 640-699: Неисправимые ошибки ORACLE........82
Коды 700-799: Фатальные ошибки..................82
E ПРИЛОЖЕНИЕ В Замечания для пользователей утилиты загрузки
БД DB2 и DXT...........................83F
Дополнительные возможности SQL*Loader по
сравнению с утилитой загрузки DB2...............
Использование опции RESUME из DB2...............
Обеспечение совместимости.......................
Оператор LOG................................
Оператор WORKDDN............................
Операторы SORTDEVT и SORTNUM................
Cпецификация DISCARD........................
Ограничения.....................................
Оператор FORMAT.............................
Оператор PART...............................
Опция SQL/DS................................
Графические строки DBCS.....................
E ПРИЛОЖЕНИЕ С Зарезервированные слова SQL*Loader............F
EИндекс ..............................................F
E ПРЕДИСЛОВИЕ F
Это руководство объясняет,как использовать
SQL*Loader,инструмент для загрузки данных из
внешних файлов в таблицы БД ORACLE.
SQL*Loader обрабатывает широкое разнообразие
форматов входных файлов и дает вам возможность
управлять загрузкой записей в таблицы ORACLE.
Это руководство объясняет использование
SQL*Loader после того,как он установлен.
Инструкции по установке SQL*Loader отсутс-
твуют в этом руководстве; они приведены в
руководствах по установке и использованию
для каждой отдельной ОС,таких как
Установка и руководство пользователя для
DEC VAX/VMS или
Установка и руководство пользователя для
IBM VM/SP.
SQL*Loader используется вместо Загрузчика
Данных ORACLE (ODL) корпорации ORACLE.
EАудиторияF Руководство пользователя SQL*Loader предназ-
начено для тех,кто желает загрузить данные
в таблицы БД ORACLE,используя
SQL*Loader.Оно дает введение в понятие
загрузки данных для тех,кто не использовал
загрузчик данных ранее,а также ссылочный
материал для более опытных пользователей.
Представлены также многочисленные примеры.
Предполагается,что пользователь знаком с:
* ОС на его компьютере
* ее системой управления файлами и записями
* языком SQL
* таблицами,которые д.б. загружены.
EКак организованоF Эта книга содержит несколько глав и приложений.
Eэто руководство F
EГлава 1:F Введение
Описан продукт SQL*Loader и его возможности.
Вводит понятие загрузки данных.
EГлава 2:F Примеры использования SQL*Loader
Представлены примеры для изучения наиболее
часто встречающихся ситуаций при загрузке
данных,таких как загрузка файлов данных
фиксированного формата,загрузка входных
файлов в свободном формате и загрузка нес-
кольких таблиц за один прогон.
EГлава 3:F Синтаксис командной строки
Описан синтаксис командной строки,исполь-
зуемый SQL*Loader.
EГлава 4:F Синтаксис управляющего файла
Описан синтаксис управляющего файла,ис-
пользуемый SQL*Loader.
EПриложение А:F Предупреждения и сообщения об
ошибках SQL*Loader
Перечислены сообщения об ошибках SQL*Loader,
которые могут возникнуть,указаны возможные
причины и необходимые действия.
EПриложение В:F Замечания для пользователей
утилиты загрузки БД DB2 и DXT
Описаны различия в синтаксисе управляющих
файлов между SQL*Loader и DB2.
EПриложение С:F Зарезервированные слова
SQL*Loader
В этом приложении перечислены слова,заре-
зервированные для использования продуктами
ORACLE RDBMS и SQL*Loader.
EКак использоватьF Если вы раньше не работали с загрузчиками
Eэто руководство F данных,начните со введения в главе 1,а за-
тем изучите примеры в главе 2.Эти две гла-
вы дают хорошее введение в понятие загрузки
данных,включающее несколько примеров.
Когда вы почувствуете себя достаточно уве-
ренно,вы можете обратиться к главам 3 и 4
для изучения специальных вопросов использо-
вания SQL*Loader.
Если вы уже знакомы с загрузчиком данных
ORACLE (ODL) или другими загрузчиками,вы
можете научиться использовать SQL*Loader,
посмотрев синтаксис командной строки и уп-
равляющего файла,представленный в главах
3 и 4.
Примеры управляющих файлов и файлов данных,
соответствующие примерам в этой книге,на-
ходятся на дистрибутивном носителе; вы мо-
жете использовать их для небольшой практики.
Обратите внимание на файлы:
CASE1.CTL (этот управляющий файл содержит также
и данные)
CASE2.CTL CASE2.DAT
CASE3.CTL (этот управляющий файл содержит также
и данные)
CASE4.CTL CASE4.DAT
CASE5.CTL CASE5.DAT
Заметьте,что это руководство не содержит
инструкций по установке,так как они раз-
личны для разных операционных систем.Обра-
титесь,пожалуйста,к вашему руководству по
установке,чтобы узнать,как установить
SQL*Loader.Если существуют специфические
особенности ОС,они опи-
саны в руководстве по установке и использо-
ванию ORACLE.
EПубликации, F Кроме этого руководства при работе вы може-
Eсвязанные с этимF те пожелать обратиться к следующим докумен-
Eдокументом F там,опубликованным Корпорацией ORACLE.
Вы автоматически получите заглавие,которое
отошлет вас к необходимому продукту.Вам не
обязательно нужны все из перечисленных до-
кументов.
Документация по ORACLE RDBMS включает:
* ORACLE RDBMS,ORACLE Часть N.3001
* ORACLE Руководство администратора базы
данных,ORACLE Часть N.3601
* Сообщения об ошибках и коды,
ORACLE Часть N.3605
* ORACLE Руководство пользователя
по утилитам,ORACLE Часть N.3602
Предусмотрены также руководства по установ-
ке и использованию для каждой OC,такие как:
* ORACLE для DEC VAX/VMS Установка и руко-
водство пользователя,ORACLE Часть N.1001
* ORACLE для IBM VM/SP Установка и руко-
водство пользователя,ORACLE Часть N.1003
EСоглашения,F Следующие соглашения используются в этом
EиспользуемыеF руководстве:
Eв этом F EКоманды:F Заглавные буквы используются,что-
Eруководстве F бы указать текст,который должен быть вве-
ден точно также,как показано.Зарезервиро-
ванные слова и ключевые слова не могут быть
использованы как имена таблиц или колонок,
если вы не заключаете их в двойные кавычки.
SQLLOAD SCOTT/TIGER MAY.CTL MAY.LOG
EПеременные:F Переменные,вместо которых
пользователь должен подставить соответству-
ющие значения,указываются строчными буква-
ми.Круглые скобки должны вводиться как
указано:
[GRAPHIC (length)]
EАльтернативные значения:F Альтернативные
значения разделяются вертикальной чертой.
Они заключены в фигурные скобки,если тре-
буется выбрать одно значение,или в квад-
ратные скобки,если значение м.б.
опущено.
EТребуемые значения:F Требуемые значения зак-
лючены в фигурные скобки.Вы можете выбрать
один из вариантов значения.
{BADFILE | BADDN} filename
EОпциональные значения:F Опциональные значения
заключены в квадратные скобки.
[GRAPHIC (length)]
EЗначения с повторением:F Многоточие указыва-
ет на произвольное число однотипных значе-
ний.
[ columnspec,columnspec...]
EВаши замечанияF Технический персонал Корпорации ORACLE
EприветствуютсяF приветствует ваши замечания.При создании,
пересмотре и оценке наших публикаций ваше
мнение - это наиболее важная часть информа-
ции,которую мы получаем.Пожалуйста,
используйте "Форму читательского отзыва",
чтобы сообщить нам,что вам нравится и что
не нравится в этом руководстве.Вы можете
также связаться с нами по следующему адресу:
ORACLE Corporation
ATTN: SQL*Loader Product Manager
20 Davis Drive
Belmont,California 94002
(415)598-8000
+ E ГЛАВА 1
ВВЕДЕНИЕ F
Эта глава описывает основные концепции загрузки
данных в БД ORACLE при помощи программ-
ного продукта ORACLE под названием SQL*Loader.
В частности,она описывает входную информацию,
которую вы должны подготовить для SQL*Loader,и
выходную информацию,формируемую при его выпол-
нении.
E ЧТО ТАКОЕ SQL*LOADER? F
SQL*Loader - это продукт для пересылки данных из
внешних файлов в таблицы БД ORACLE.Он
имеет много возможностей,обеспеченных в Утилите
Загрузки DB2 Корпорации IBM,а также включает ряд
дополнительных возможностей,расширяющих его мощ-
ность и широту применения.
SQL*Loader загружает данные в различных форма-
тах,выполняет фильтрацию (выборочную загрузку за-
писей в зависимости от значений данных),и может
загружать несколько таблиц одновременно.Во время
выполнения SQL*Loader формирует детальный файл от-
чета со статистикой загрузки и может также созда-
вать файл отброшенных записей (записи,отброшенные
из-за ошибок в данных) и файл пропущенных записей
(записи,которые не соответствуют критерию выбо-
ра).Вы можете управлять загрузкой при помощи
нескольких опций.
SQL*Loader может:
* загружать данные из нескольких файлов данных
различных типов
* обрабатывать записи фиксированного формата,сво-
бодного формата,а также записи переменной длины
* поддерживать широкий спектр типов данных,вклю-
чая DATE,BINARY,и PACKED DECIMAL
* загружать несколько таблиц за один прогон; заг-
ружать выбранные строки в каждую таблицу
* комбинировать несколько физических записей в
одну логическую запись
* обрабатывать одну физическую запись как несколь-
ко логических записей
* генерировать уникальное последовательное значе-
ние ключа в указанной колонке
* использовать систему управления файлами или за-
писями вашей ОС для доступа к
файлам данных
* загружать данные с диска или ленты
* обеспечить полный контроль и диагностику ошибок,
что позволяет легко выверить и загрузить все
данные
* использовать управляющий файл,совместимый с
файлом загрузчика DB2 Корпорации IBM (включая
файл,создаваемый утилитой DXT (IBM),которая
выгружает данные из различных источников).
SQL*Loader более многосторонний,чем Загрузчик
Данных ORACLE (ODL),который использовался в пре-
дыдущих версиях ORACLE RDBMS.SQL*Loader включает
в себя все возможности ODL,и в будущем полностью
заменит его.
E УСТАНОВКА SQL*LOADER F
Это руководство не содержит инcтрукций по установ-
ке,так как они различны для разных OC.Обратитесь,пожалуйста,
к вашему руководс-
тву по установке,чтобы узнать,как установить
SQL*Loader.
E ВХОДНАЯ ИНФОРМАЦИЯ SQL*LOADER F
Чтобы загрузить данные из внешних файлов в БД
ORACLE,вы должны подготовить для SQL*Loader
входную информацию 2 типов: сами данные и уп-
равляющую информацию,описывающую,как выполнять
загрузку.
Данные,загружаемые в БД ORACLE,должны
находиться в файлах на диске или ленте.Эти файлы
данных SQL*Loader должны интерпретироваться неко-
торым образом при загрузке.Информация для этого
находится в управляющем файле.
E Управляющий файл (control file) F
Вы должны подготовить как вход к SQL*Loader файл,
который называется управляющим файлом.Назначение
этого файла - описать данные,которые д.б.
загружены.Например,он описывает:
* имена файлов данных
* формат файлов данных
* поля данных в этих файлах
* как загружать данные в таблицы (какие таблицы и
колонки д.б. загружены).
Некоторая информация является обязательной (где
найти данные и как они соответствуют таблицам БД
),однако имеется также много опций для опи-
сания и манипулирования данными.Например,инс-
трукции могут включать указание,как форматировать
или фильтровать данные,или как генерировать уни-
кальный номер ID.
Данные и управляющая информация могут быть подго-
товлены в отдельных файлах или вместе в одном и
том же файле.
SQL*Loader использует язык загрузки данных,совмес-
тимый вверх с языком Загрузчика DB2 Корпорации IBM.
Если вы имеете управляющий файл Загрузчика DB2,вы
можете также использовать его для SQL*Loader;
см.Приложение В для отличий в синтаксисе.
E Данные F
Загружаемые данные могут существовать в нескольких
форматах.Они обычно читаются из одного или нес-
кольких файлов данных,но данные можно также вклю-
чить после управляющей информации в управляющий
файл.
E Двоичный и F Загружаемые данные могут иметь 2-й формат или
E символьный F символьный формат.Двоичный формат используется
E форматы F при хранении в памяти компьютера.Человек не может
смотреть на 2-й файл и читать его содержание
непосредственно,как он читает символьный файл.
Символьный формат также называют внешним (external)
форматом.
Данные двоичного и символьного форматов могут на-
ходиться в файлах как фиксированного,так и пере-
менного форматов.
E ФиксированныйF Записи данных могут иметь фиксированный или пере-
E и переменный F менный формат.При фиксированном формате данные
E форматы F содержатся в записях,которые все имеют одинаковый
(фиксированный) формат.Это означает,что записи
имеют одинаковую фиксированную длину,а поля дан-
ных в этих записях имеют одинаковые длину,тип и
позицию.Например,колонки 1-6 могут содержать
символьную переменную,колонки 7-10 могут содер-
жать целое и так далее,одинаково во всех записях.
Для обработки поля фиксированной длины использо-
вать рациональнее,чем поля переменной длины.
При переменном формате (его иногда называют "сво-
бодный формат") каждая запись имеет длину,необхо-
димую,чтобы вместить данные.Так,в случае симво-
льных данных,если первое значение короче второго,
то первая запись будет короче.Кроме того,типы
данных в различных записях могут отличаться.Одна
запись может содержать символьную строку,другая -
семь целых значений,третья три десятичных и одно
плавающее и так далее.Операционная система ис-
пользует терминальный символ записи (такой как
"новая строка"),чтобы различить,где заканчивают-
ся записи переменной длины.
Данные в свободном формате представляются двумя
способами: с ограничителями и разделителями.Дан-
ные с ограничителями ограничены с2сторон спе-
циальным символом,возможно апострофом:
"BUNKY" "EEMO"
Данные с разделителями отделяются друг от друга
специальным символом,возможно,запятой:
1,1,2,3,5,8,13,...
E Логические иF Последнее различие касается разницы между логичес-
E физические F кими и физическими записями.Мы ссылаемся к записи
E записи F или линии в файле (фиксированной или переменной
длины) как к физической записи.Системы управления
файлами/записями,зависящие от OC
(например RMS в DEC или SAM в IBM) возвращают
физические записи.
Логические записи,с другой стороны,соответствуют
строке в таблице БД.Иногда логические и
физические записи эквивалентны,например,когда
загружаются только несколько коротких столбцов.
Однако иногда несколько физических записей д.б. объединены,
чтобы получить одну логическую
запись.Например,вы используете файл,содержащий
24 десятисимвольных столбца в формате 80-символь-
ных записей фиксированной длины; в этом случае 3
физические записи представляют одну логическую за-
пись.
В SQL*Loader вы можете собрать логическую запись
из нескольких физических,используя поле продолже-
ния.Физические записи объединяются в одну логи-
ческую запись,если некоторое условие для поля
продолжения верно.Вы можете указать,что логичес-
кая запись д.б. получена из нескольких фи-
зических записей следующими способами:
* n физических записей д.б. всегда сцепле-
ны,чтобы создать одну логическую запись (поле
продолжения не используется)
* физические записи сцепляются,если поле продол-
жения содержит заданную строку (или в другом ва-
рианте "не равно" заданной строке)
* физические записи объединяются,если они содержат
заданный символ в последней непустой позиции.
E ПОДГОТОВКА БАЗЫ ДАННЫХ F
Таблицы,в которые загружаются данные,должны уже
существовать в БД ORACLE.Нет специальных
требований к этим таблицам; они м.б. класте-
рированными или индексированными,они м.б. в
действительности представлениями (view),для кото-
рых установлены полномочия INSERT.Заметьте,что
загрузка обычно выполняется быстрее,если индексы
создаются после загрузки.
Таблицы могут уже иметь данные или быть пустыми.
E ВЫХОДНАЯ ИНФОРМАЦИЯ SQL*LOADER F
Когда SQL*Loader загружает данные,он может созда-
вать до 3 файлов,как описано ниже.
E Файл отчета (log file) F
Когда SQL*Loader начинает выполняться,он создает
файл отчета. Если невозможно создать этот файл,
выполненние прекращается.Файл отчета содержит
детальную сводку выполнения, состоящую из нес-
кольких опций,как описано ниже:
EЗаголовок:F
* дата прогонна
* номер версии программного продукта
EГлобальная информация:F
* имена всех входных/выходных файлов
* эхо аргументов командной строки
* информация о символе продолжения
EИнформация таблицыF повторяется для каждой загружаемой таблицы:
* имя
* условия загрузки,если имеются (или все записи,
или предложение WHEN,используемое как критерий
загрузки)
* одно из предложений INSERT,APPEND,REPLACE
* информация колонок:
- позиция,длина,тип данных и ограничитель ко-
лонки,если она имеется в файле данных
- RECNUM,SEQUENCE или CONSTANT,если указано
- DEFAULTIF или NULLIF,если указано
EИнформация файла данныхF помещается в отчет только
для тех файлов данных,которые имеют ошибки дан-
ных:
* SQL*Loader/ORACLE ошибки для записей с ошибоч-
ными данными
* пропущенные записи
EИнформация о загрузке таблицыF повторяется для каж-
дой загружаемой таблицы:
* количество загруженных строк
* количество строк,которые должны были
загружаться,но отброшены из-за ошибок данных
* количество пропущенных строк,не удовлетворяющих
условию WHEN
* количество строк,для которых все используемые
поля были пустыми
EИтоговая статистикаF
* используемое пространство
- для 2-х массивов (действительно исполь-
зуемое по сравнению с указанным в BINDSIZE)
- для другой служебной информации (требуется
всегда и не зависит от BINDSIZE)
* совокупная статистика загрузки.Для каждого фай-
ла данных содержит количество записей,которые
были
- пропущены до обработки
- прочитаны
- отброшены
- пропущены при обработке
* время начала и окончания прогона
* полное время выполнения
* полное время процессора (включает время всех
операций ввода-вывода,но может не включать фо-
новое время процессора ORACLE).
Большая часть этой информации выдается при успеш-
ном выполнении SQL*Loader.Однако обнаруженные
ошибки приводят к выдаче различных порций отчета.
Например,если сам файл отчета не м.б. соз-
дан,выполнение SQL*Loader прекращается.Ошибки,
обнаруженные при обработке управляющего файла,бу-
дут отмечены в файле отчета,обнаруженные в ко-
мандной строке - нет.
E Файл отброшенных записей (bad file) F
При выполнении SQL*Loader создает файл отброшенных
записей.Этот файл содержит все записи,которые
SQL*Loader пытался загрузить,но не смог.Эти за-
писи называются отброшенными записями.
Запись отбрасывается,если:
* при загрузке записи возникает ошибка ORACLE
(например,неверные данные для некоторого типа
данных,дублируется значение в уникальном индек-
се,пустое значение в поле NOT NULL)
* SQL*Loader не может определить,правильные дан-
ные или нет.Так,невозможно определить,удов-
летворяет ли запись условию WHEN в случае
несбалансированных ограничителей.Например,если
используются ограничители - двойные кавычки,то
SQL*Loader пропустит запись
,"U G,
Если же условие WHEN м.б. проверено даже в
случае несбалансированных ограничителей,данные
будут соответственно либо загружены,либо отброше-
ны.
Если запись отброшена при загрузке,то никакая
часть этой записи не будет загружена в какую-либо
таблицу.Например,если данные из одной записи
д.б. вставлены в несколько таблиц,несколь-
ко операций выполнилось успешно,а одна заверши-
лась аварийно,то для всех операций вставки из
этой записи будет выполнен откат.Запись помещает-
ся в файл отброшенных записей,где она м.б.
исправлена и при необходимости загружена повторно.
Предыдущие операции вставки из записи,не содержа-
щей ошибок,не имеют последствий.
Файл отчета содержит сообщения об ошибках ORACLE
для каждой отброшенной записи.
SQL*Loader всегда создает файл отброшенных запи-
сей.Он м.б. пустым,если ни одной записи не
отброшено.Он записывается в том же формате,что и
файл данных,поэтому отброшенные данные после ре-
дактирования или необходимого исправления м.б. загружены с
тем же управляющим файлом.
E Файл пропущенных записей (discard file) F
При выполнении SQL*Loader может создавать файл
пропущенных записей.Этот файл создается,если вы
укажете одну из 2 опций в командной строке:
DISCARD = filename
DISCARDMAX = nn
или если вы используете одну из опций в управляю-
щем файле:
DISCARDFILE filename
DISCARDDN filename
DISCARDS n
DISCARDMAX n
Итак,файл пропущенных записей создается,если вы
явно потребуете это (указав имя файла),или вы не-
явно потребуете,указав,например,максимальное
количество записей для него.В последнем случае
имя файла пропущенных записей совпадает с именем
файла данных,но принимается расширение имени фай-
ла DSC.
Записи помещаются в файл пропущенных записей,
если:
* ни одно условие WHEN не выполняется для ка-
кой-либо загружаемой таблицы
* условие WHEN выполняется для таблицы,но все по-
ля пустые,либо из-за NULLIF,либо как
отсутствующие.
Если данные из записи загружены в таблицу,эта за-
пись не помещается в файл пропущенных записей.
Файл пропущенных записей записывается в том же
формате,что и файл данных,поэтому пропущенные
данные после редактирования и исправления м.б. загружены с
тем же управляющим файлом.
+ E ГЛАВА 2
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ SQL*LOADER F
Эти примеры демонстрируют некоторые возможности
SQL*Loader.Примеры расположены по возрастанию
сложности.Вы можете получить практику работы с
SQL*Loader,используя файлы,находящиеся на дист-
рибутивном носителе для SQL*Loader
E ОПИСАНИЕ ПРИМЕРОВ F
Приведены следующие примеры:
EПример 1:F Загрузка записей переменной длины,в ко-
торых поля разделены запятой и м.б. заключе-
ны в кавычки.Данные находятся в конце управляюще-
го файла.
EПример 2:F Загрузка файла данных с записями фикси-
рованной длины и фиксированного формата без
дополнительных специальных возможностей.
EПример 3:F Загрузка данных из записей переменной
длины в свободном формате и с порядковыми номера-
ми.Данные находятся в конце управляющего файла.
EПример 4:F Объединение нескольких физических запи-
сей в одну логическую запись,соответствующую од-
ной строке БД.
EПример 5:F Загрузка данных в несколько таблиц за
один прогон.
Дистрибутивный носитель для SQL*Loader содержит
один или два файла для каждого из примеров: управ-
ляющий файл и файл данных.Название этих файлов
CASE1.CTL и CASE1.DAT и так далее для каждого при-
мера.
Эти примеры используют таблицы EMP и DEPT стан-
дартной демонстрационной БД ORACLE.
Имя/пароль владельца - SCOTT/TIGER.Ниже приведены
операторы определения таблиц.
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL,
ENAME CHAR(10),
JOB CHAR(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2))
CREATE TABLE DEPT
(DEPTNO NUMBER(2),
DNAME CHAR(14),
LOC CHAR(13))
В некоторых примерах будут добавлены дополнитель-
ные колонки для иллюстрации возможностей.
E ПРИМЕР 1: ЗАГРУЗКА ДАННЫХ ПЕРЕМЕННОЙ ДЛИНЫ F
Пример 1 демонстрирует:
* простой управляющий файл,идентифицирующий одну
таблицу и 3 колонки для загрузки
* данные,включенные в управляющий файл (так что
не нужен отдельный файл данных)
* загрузку полей и записей переменной длины.
В приведенном ниже листинге управляющего файла
(CASE1.CTL) числа слева Eотсутствуют в реальном
файлеF и являются номерами в расположенных ниже за-
мечаниях.Не включайте эти числа в подготавливае-
мый управляющий файл.
і і
і 1 LOAD DATA і
і 2 INFILE * і
і 3 INTO TABLE DEPT і
і 4 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' і
і 5 (DEPTNO,DNAME,LOC) і
і 6 BEGINDATA і
і 12,RESEARCH,"SARATOGA" і
і 10,"ACCOUNTING",CLEVELAND і
і 11,"ART",SALEM і
і 13,FINANCE,"BOSTON" і
і 21,"SALES",PHILA. і
і 22,"SALES",ROCHESTER і
і 42,"INT'L","SAN FRAN" і
EЗамечания:F
1.Оператор LOAD DATA требуется в начале управля-
ющего файла.
2.Данные расположены в управляющем файле.
3.Оператор INTO TABLE требуется,чтобы указать
имя загружаемой таблицы (DEPT),по умолчанию
таблица д.б. пустой,чтобы SQL*Loader
мог вставлять записи.
4.Данные будут разделяться запятой и могут также
быть заключены в кавычки.Тип данных для всех
полей по умолчанию CHAR.
5.Имена загружаемых колонок заключены в круглые
скобки.
6.Указывает начало данных.
SQL*Loader м.б. вызван следующим образом:
SQLLOAD SCOTT/TIGER CASE1.CTL
При выполнении SQL*Loader загружается таблица DEPT
и создается 2 файла: файл отчета и файл отбро-
шенных записей (отбрасываются записи или нет,
SQL*Loader все равно создает этот файл).
Ниже приведен файл отчета.Числа слева являются
номерами расположенных ниже замечаний; они не по-
являются в действительном файле отчета.
і і
і Control File: case1.ctl і
і Data file: * і
і Read Mode: System Record і
і Bad File: case1.bad і
і Discard File: none specified і
і і
і Number to load: ALL і
і Number to skip: 0 і
і Errors allowed: 50 і
і Bind array: 64 row,maximum of 65336 bytes і
і Record Length: 726 (Buffer size allocated per logical recoі
і Continuation: none specified і
і і
і Table DEPT,loaded from every logical record. і
і Insert option in effect for this table: INSERT і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і 1 DEPTNO FIRST * , O(") CHARACTER і
і DNAME NEXT * , O(") CHARACTER і
і 2 LOC NEXT * WHT O(") CHARACTER і
і і
і Table DEPT: і
і 7 Rows successfully loaded. і
і 0 Rows not loaded due to data error. і
і 0 Rows not loaded because all WHEN clauses were failed.і
і 0 Rows not loaded because all fields were null. і
і і
і Space allocated for bind array: 46848 bytes (64 row) і
і Space otherwise allocated: 48084 bytes і
і і
і Total logical record skipped: 0 і
і Total logical record read 7 і
і Total logical record rejected: 0 і
і Total logical record discarded: 0 і
і і
і Run began on Tue Apr 14 11:31:53 1987 і
і Run ended on Tue Apr 14 11:31:58 1987 і
і і
і Elapsed time was: 00:00:04.93 і
і CPU time was: 00:00:00.73 і
EЗамечания:F
1.Позиция и длина каждого поля в записи определя-
ется положением разделителей во входном файле.
2.WHT обозначает,что поле LOC заканчивается
символом WHITESPACE.Символы О(") обозначают
опциональное необязательное использование огра-
ничителей - кавычек.
E ПРИМЕР 2: ЗАГРУЗКА ЗАПИСЕЙ ФИКСИРОВАННОГО ФОРМАТА F
Пример 2 демонстрирует:
* простой управляющий файл,идентифицирующий файл
данных,таблицу и колонки для загрузки
* отдельный файл данных
* файл с данными фиксированного формата.
В этом файле позиции полей и типы данных указаны
явно.
В приведенном ниже листинге управляющего файла
(CASE2.CTL) числа слева отсутствуют в реальном
файле и являются номерами в расположенных ниже за-
мечаниях.Не включайте эти числа в подготавливае-
мый управляющий файл.
і і
і 1 LOAD DATA і
і 2 INFILE CASE2.DAT і
і 3 INTO TABLE EMP і
і 4 ( EMPNO POSITION(01:04) INTEGER EXTERNAL, і
і NAME POSITION(06:15) CHAR, і
і JOB POSITION(17:25) CHAR, і
і MGR POSITION(27:30) INTEGER EXTERNAL, і
і SAL POSITION(32:39) DECIMAL EXTERNAL, і
і COMM POSITION(41:48) DECIMAL EXTERNAL, і
і 5 DEPTNO POSITION(50:51) INTEGER EXTERNAL) і
EЗамечания:F
1.Оператор LOAD DATA требуется в начале управляю-
щего файла.
2.Имя файла,содержащего данные,следует за клю-
чевым словом INFILE.
3.Оператор INTO TABLE требуется,чтобы указать
имя загружаемой таблицы.
4.В строках от 4 до 5 указано имя колонки,поло-
жение данных в файле,откуда загружается эта
колонка.Имена EMPNO,ENAME,JOB и т.д.- это
имена колонок в таблице EMP.Типы данных
(INTEGER EXTERNAL,CHAR,DECIMAL EXTERNAL) ука-
зывают тип данных поля в файле,а не соответс-
твующей колонки в таблице EMP.
5.Заметьте,что группа описаний полей заключена в
круглые скобки.
Ниже приведено несколько строчек данных из файла
CASE2.DAT
і і
і 7782 CLARK MANAGER 7839 2572.50 10 і
і 7839 KING PRESIDENT 5500.00 10 і
і 7934 MILLER CLERK 7782 920.00 10 і
і 7566 JONES MANAGER 7839 3123.75 20 і
і 7499 ALLEN SALESMAN 7698 1600.00 300.00 30 і
і 7654 MARTIN SALESMAN 7698 1312.50 1400.00 30 і
і 7658 CHAN ANALIST 7566 3450.00 20 і
Пропущенным полям автоматически присваиваются пус-
тые значения.
SQL*Loader м.б. вызван следующим образом:
SQLLOAD scott/tiger case2.ctl case2.log
При выполнении SQL*Loader загружается таблица EMP
и создается два файла: файл отчета и файл отбро-
шенных записей (отбрасываются записи или нет,
SQL*Loader все равно создает этот файл).
Ниже приведен файл отчета.
і і
і Control File: case2.ctl і
і Data File: CASE2.DAT і
і Read Mode: System Record і
і Bad File: case2.bad і
і Discard File: none specified і
і і
і Number to load: ALL і
і Number to skip: 0 і
і Errors allowed: 50 і
і Bind array: 64 row,maximum of 65336 bytes і
і Record Length: 80 (Buffer size allocated per logical recоrі
і Continuation: none specified і
і і
і Table EMP,loaded from every logical record. і
і Insert option in effect for this table: INSERT і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і ENAME 6:15 10 CHARACTER і
і JOB 17:25 9 CHARACTER і
і MGR 27:30 4 CHARACTER і
і SAL 32:39 8 CHARACTER і
і COMM 41:48 8 CHARACTER і
і DEPTNO 50:51 2 CHARACTER і
і і
і Table EMP: і
і 20 Rows successfully loaded. і
і 0 Rows not loaded due to data error. і
і 0 Rows not loaded because all WHEN clauses were failed.і
і 0 Rows not loaded because all fields were null. і
і і
і Space allocated for bind array: 3776 bytes (64 row) і
і Space otherwise allocated: 6740 bytes і
і і
і Total logical record skipped: 0 і
і Total logical record read 20 і
і Total logical record rejected: 0 і
і Total logical record discarded: 0 і
і і
і Run began on Tue Apr 14 11:45:45 1987 і
і Run ended on Tue Apr 14 11:45:52 1987 і
і і
і Elapsed time was: 00:00:07.18 і
і CPU time was: 00:00:00.89 і
E ПРИМЕР 3: ЗАГРУЗКА ФАЙЛА В СВОБОДНОМ ФОРМАТЕ F
Пример 3 демонстрирует:
* загрузку данных в формате потока с 2-я типами
данных: с ограничителями и разделителями
* загрузку календарных дат
* включение загруженных данных в сам управляющий
файл (данные отмечены ключевым словом BEGINDATA)
* использование функции SEQUENCE для генерации
уникальных ключей загружаемых данных
* использование APPEND для указания того,что
таблица м.б. непустой перед добавлением
новых записей
* использование комментариев в управляющем фай-
ле,выделенных 2-я минусами.
Этот управляющий файл загружает ту же таблицу,
что и в примере 2,но он также загружает 3 до-
полнительные колонки (HIREDATE,PROJNO,
LOADSEQ).Демонстрационная таблица EMP не содер-
жит колонок PROJNO и LOADSEQ,поэтому если вы
хотите протестировать этот контрольный файл,до-
бавьте эти колонки к таблице EMP командой
ALTER TABLE EMP
ADD (PROJNO NUMBER,LOADSEQ NUMBER)
Формат данных отличается от используемого в при-
мере 2.Некоторые данные заключены в кавычки,
некоторые отделены запятыми,а значения для
DEPTNO и PROJNO разделены двоеточием.
В приведенном ниже листинге управляющего файла
(CASE3.CTL) числа слева отсутствуют в реальном
файле и являются номерами в расположенных ниже
замечаниях.Не включайте эти числа в подготав-
ливаемый управляющий файл.
і і
і 1 -- Записи переменной длины с ограничителями и разделителями і
і і
і LOAD DATA і
і 2 INFILE * і
і 3 APPEND і
і INTO TABLE EMP і
і 4 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' і
і (empno,ename,job,mgr, і
і 5 hiredate DATE "DD-Month-YYYY", і
і sal,comm, і
і deptno CHAR TERMINATED BY ':', і
і projno, і
і 6 loadseq SEQUENCE(MAX,1) ) і
і 7 BEGINDATA і
і 8 7782,"Clark","Manager",7839,09-June-1981,2572.50,,10:101 і
і 7839,"King","President",,17-November-1981,5500.00,,10:102і
і 7934,"Miller","Clerk",7782,23-January-1982,920.00,,10:102і
і 7566,"Jones","Manager",7839,02-April-1981,3123.75,,20:101і
і 7499,"Allen","Salesman",7698,20-February-1981,1600.00, і
і (продолжение) 300.00,30:103 і
і 7654,"Martin","Salesman",7698,28-September-1981,1312.50,і
і (продолжение) 1400.00,3:103 і
і 7658,"Chan","Analist",7566,03-May-1982,3450,,20:101 і
EЗамечания:F
1.Комментарии могут появляться везде,где угодно
в управляющем файле,но они не допускаются в
данных.Им предшествуют 2 тире,которые м.б. размещены в
любом месте строки.
2.Указывает,что данные расположены в конце уп-
равляющего файла.
3.Указывает,что данные можно загружать,даже ес-
ли таблица уже содержит строки.Не требуется,
чтобы таблица была пустой.
4.По умолчанию разделитель для полей данных - за-
пятая,и некоторые поля м.б. заключены в
двойные кавычки.
5.Данные,загружаемые в колонку HIREDATE,пред-
ставлены в формате DD-Month-YYYY
6.Функция SEQUENCE используется,чтобы сгенериро-
вать уникальное значение в колонке LOADSEQ.
Функция SEQUENCE находит текущее максимальное
значение колонки LOADSEQ и добавляет приращение
(1) к нему,чтобы получить значение для LOADSEQ
для каждой добавляемой строки.
7.Определяет конец управляющей информации и нача-
ло данных.
8.Заметьте,что хотя каждая физическая запись со-
ответствует одной логической записи,длина по-
лей различна и поэтому различна длина записей.
Заметьте также,что некоторые строки имеют
пустое значение для COMM.
SQL*Loader м.б. вызван следующим образом:
SQLLOAD SCOTT/TIGER ACCCE3.CTL CASE3.LOG CASE3.BAD
Ниже приведена часть файла отчета.
і і
і Control File: case3.ctl і
і Data File: * і
і Read Mode: System Record і
і Bad File: case3.bad і
і Discard File: none specified і
і і
і Number to load: ALL і
і Number to skip: 0 і
і Errors allowed: 50 і
і Bind array: 64 row,maximum of 65336 bytes і
і Record Length: 2182 (Buffer size allocated per logical recі
і Continuation: none specified і
і і
і Table EMP,loaded from every logical record. і
і Insert option in effect for this table: APPEND і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і empno FIRST * , O(") CHARACTER і
і ename NEXT * , O(") CHARACTER і
і job NEXT * , O(") CHARACTER і
і mjr NEXT * , O(") CHARACTER і
і hiredate NEXT * , O(") DATE DD-Month-YYYY і
і sal NEXT * , O(") CHARACTER і
і comm NEXT * , O(") CHARACTER і
і deptno NEXT * : O(") CHARACTER і
і projno NEXT * , O(") CHARACTER і
і loadseq SEQUENCE (MAX,1) і
і і
і Table EMP: і
і 7 Rows successfully loaded. і
і 0 Rows not loaded due to data errors. і
і 0 Rows not loaded because all WHEN clauses were failed.і
і 0 Rows not loaded because all fields were null. і
і і
і Space allocated for bind array: 63800 bytes (29 row) і
і Space otherwise allocated: 64163 bytes і
і і
і Total logical record skipped: 0 і
і Total logical record read 7 і
і Total logical record rejected: 0 і
і Total logical record discarded: 0 і
E ПРИМЕР 4: ЗАГРУЗКА НЕСКОЛЬКИХ ФИЗИЧЕСКИХ ЗАПИСЕЙ КАК ОДНОЙ
ЛОГИЧЕСКОЙ ЗАПИСИ F
Пример 4 демонстрирует:
* объединение нескольких физических записей в одну
логическую
* использование ключевого слова CONTINUEIF
* загрузку отрицательных чисел
* указание,что новые записи должны замещать ста-
рые,при помощи ключевого слова REPLACE
* определение файла пропущенных записей ключевым
словом DISCARDFILE
* указание максимального количества пропущенных
записей ключевым словом DISCARDMAX
* отбрасывание записей из-за дублирования значений
уникального индекса
* отбрасывание записей из-за неправильных значений
данных
В приведенном ниже листинге управляющего файла
(CASE4.CTL) числа слева отсутствуют в реальном
файле и являются номерами в расположенных ниже за-
мечаниях.Не включайте эти числа в подготавливае-
мый управляющий файл.
і і
і LOAD DATA і
і INFILE case4.dat і
і 1 DISCARDFILE case4.dis і
і 2 DISCARDMAX 999 і
і 3 REPLACE і
і 4 CONTINUEIF THIS (1) = '*' і
і і
і INTO TABLE EMP і
і ( EMPNO POSITION(02:05) INTEGER EXTERNAL, і
і NAME POSITION(07:16) CHAR, і
і JOB POSITION(18:26) CHAR, і
і MGR POSITION(28:31) INTEGER EXTERNAL, і
і SAL POSITION(33:40) DECIMAL EXTERNAL, і
і COMM POSITION(42:49) DECIMAL EXTERNAL, і
і DEPTNO POSITION(51:52) INTEGER EXTERNAL, і
і HIREDATE POSITION(53:61) INTEGER EXTERNAL) і
EЗамечания:F
1.Определяет файл пропущенных записей с именем
CASE4.DIS.
2.Указывает,что допускается максимум 999 пропу-
щенных записей перед тем,как выполнение прек-
ращается (в практических целях допускается про-
пускать все записи).
3.Указывает,что если в загружаемой таблице
имеются данные,SQL*Loader должен удалить их
перед загрузкой новых данных.
4.Указывает,что если в позиции 1 текущей записи
находится звездочка,то следующая физическая
запись должна рассматриваться как продолжение
текущей записи для формирования одной логичес-
кой записи.Заметьте,что позиция 1 в каждой
физической записи должна либо содержать звез-
дочку,либо не содержать данные.
Ниже приведен файл данных,CASE4.DAT.Заметьте,
что звездочка расположена в первой позиции,а не-
видимый символ новой строки - в позиции 20 (после
"MA","PR" и т.д.).Заметьте,что CLARK имеет ко-
миссионные -10 и SQL*Loader загружает это значе-
ние,преобразуя его в форму отрицательного числа.
Последние две записи будут отброшены по двум при-
чинам.Если для колонки EMPNO создается уникальный
индекс,то запись для CHIN будет отброшена,так
как его EMPNO идентичен значению для CHAN.Если
EMPNO определена как NOT NULL,тогда запись для
CHEN будет отброшена,так как она не содержит зна-
чение EMPNO.
і і
і *7782 CLARK MA і
і NAGER 7839 2572.50 -10 2512-NOV-85 і
і *7839 KING PR і
і ESIDENT 5500.00 2505-APR-83 і
і *7934 MILLER CL і
і ERK 7782 920.00 2508-MAY-80 і
і *7566 JONES MA і
і NAGER 7839 3123.75 2517-JUL-85 і
і *7499 ALLEN SA і
і LESMAN 7698 1600.00 300.00 25 3-JUN-84 і
і *7654 MARTIN SA і
і LESMAN 7698 1312.50 1400.00 2521-DEC-85 і
і *7658 CHAN AN і
і ALIST 7566 3450.00 2516-FEB-84 і
і * CHEN AN і
і ALIST 7566 3450.00 2516-FEB-84 і
і *7658 CHIN AN і
і ALIST 7566 3450.00 2516-FEB-84 і
Ниже приведен файл отчета.
і і
і Control File: case4.ctl і
і Data File: case4.dat і
і Read Mode: System Record і
і Bad File: case4.bad і
і Discard File: case4.dsc (Allow 999 discards) і
і і
і Number to load: ALL і
і Number to skip: 0 і
і Errors allowed: 50 і
і Bind array: 64 row,maximum of 65336 bytes і
і Record Length: 80 (Buffer size allocated per logical recо і
і Continuation: 1:1 = '*',in current physical record і
і і
і Table EMP,loaded from every logical record. і
і Insert option in effect for this table: REPLACE і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і ENAME 6:15 10 CHARACTER і
і JOB 7:25 9 CHARACTER і
і MGR 7:30 4 CHARACTER і
і SAL 2:39 8 CHARACTER і
і COMM 1:48 8 CHARACTER і
і DEPTNO 50:51 2 CHARACTER і
і HIREDATE 52:60 9 CHARACTER і
і і
і Rejected logical records and errors: і
і і
і Data File case4.dat - і
і і
і Record 8: Rejected - Error on table EMP,column EMPNO. і
і ORA-1400: mandatory (NOT NULL) column is missing or NULL і
і during insert. і
і Record 9: Rejected - Error on table EMP. і
і ORA-0001: duplicate value in index. і
і і
і Table EMP: і
і 7 Rows successfully loaded. і
і 2 Rows not loaded due to data errors. і
і 0 Rows not loaded because all WHEN clauses were failed.і
і 0 Rows not loaded because all fields were null. і
і і
і Space allocated for bind array: 4480 bytes (64 row) і
і Space otherwise allocated: 6740 bytes і
і і
і Total logical record skipped: 0 і
і Total logical record read 9 і
і Total logical record rejected: 2 і
і Total logical record discarded: 0 і
і і
і Run began on Tue Apr 14 14:50:07 1987 і
і Run ended on Tue Apr 14 14:50:15 1987 і
і і
і Elapsed time was: 00:00:07.96 і
і CPU time was: 00:00:01.16 і
Далее следует файл отброшенных записей,содержащий
записи 8 и 9.(Файл пропущенных записей пуст).
і і
і * CHEN AN і
і ALIST 7566 3450.00 2516-FEB-84 і
і *7658 CHIN AN і
і ALIST 7566 3450.00 2516-FEB-84 і
E ПРИМЕР 5: ЗАГРУЗКА ДАННЫХ НЕСКОЛЬКИХ ТАБЛИЦ F
Пример 5 демонстрирует:
* загрузку нескольких таблиц (EMP и PROJ)
* использование SQL*Loader для обработки повторяю-
щихся групп в линейном файле и загрузки данных в
нормализованную таблицу (одна запись файла может
генерировать несколько строк БД)
* получение нескольких логических записей из каж-
дой физической записи
* загрузка одних и тех же полей в несколько таблиц
* использование предложения WHEN
В приведенном ниже листинге управляющего файла
числа слева отсутствуют в реальном файле и явля-
ются номерами в расположенных ниже замечаниях.
Не включайте эти числа в подготавливаемый управ-
ляющий файл.
і і
і -- Загружает записи EMP из первых 23 символов і
і -- Создает и загружает записи PROJ для каждого і
і -- указанного PROJNO для каждого служащего і
і і
і LOAD DATA і
і INFILE CASE5.DAT і
і BADFILE CASE5.BAD і
і DISCARDFILE CASE5.DSC і
і 1 REPLACE і
і і
і 2 INTO TABLE EMP і
і (EMPNO POSITION(1:4) INTEGER EXTERNAL, і
і ENAME POSITION(6:15) CHAR, і
і DEPTNO POSITION(17:18) CHAR, і
і MGR POSITION(20:23) INTEGER EXTERNAL) і
і і
і 2 INTO TABLE PROJ і
і -- PROJ имеет две непустые колонки: EMPNO and PROJNO і
і 3 WHEN PROJNO != ' ' і
і (EMPNO POSITION(1:4) INTEGER EXTERNAL і
і PROJNO POSITION(25:27) INTEGER EXTERNAL)-- 1-й і
і і
і 2 INTO TABLE PROJ і
і 4 WHEN PROJNO != ' ' і
і (EMPNO POSITION(1:4) INTEGER EXTERNAL і
і 4 PROJNO POSITION(29:31) INTEGER EXTERNAL)-- 2-й і
і і
і 2 INTO TABLE PROJ і
і 5 WHEN PROJNO != ' ' і
і (EMPNO POSITION(1:4) INTEGER EXTERNAL і
і 5 PROJNO POSITION(33:35) INTEGER EXTERNAL)-- 3-й і
EЗамечания:F
1.Указывает,что в загружаемых таблицах (EMP и
PROJ) имеются данные и они д.б. удалены
перед загрузкой новых данных.
2.Несколько предложений INTO используются для
загрузки 2 таблиц,EMP и PROJ.В действи-
тельности одна и та же группа записей обрабаты-
вается 3 раза,каждый раз с другой комбинаци-
ей колонок,чтобы загрузить таблицу PROJ.
3.WHEN используется,чтобы загрузить только те
строки,у которых PROJ имеет непустое значение.
Когда PROJNO определено в колонках 25-27,стро-
ка вставляется в таблицу PROJ,только если име-
ется значение в этих колонках.
4.Когда PROJNO определено в колонках 29-31,стро-
ка вставляется в таблицу PROJ,только если
имеется значение в этих колонках.
5.Когда PROJNO определено в колонках 33-35,стро-
ка вставляется в таблицу PROJ,только если
имеется значение в этих колонках.
Файл данных для примера 5 следующий:
і і
і 1234 BAKER 10 9999 101 102 103 і
і 1234 JOKER 10 9999 777 888 999 і
і 2664 YOUNG 20 2893 425 abc 102 і
і 5321 OTOOLE 10 9999 321 55 40 і
і 2134 FARMER 20 4555 236 456 і
і 2414 LITTLE 20 5634 236 456 40 і
і 6542 LEE 10 4532 102 321 14 і
і 2849 EDDS xx 4555 294 40 і
і 4532 PERKINS 10 9999 40 і
і 1244 HUNT 11 3452 665 133 456 і
і 123 DOOLITTLE 12 9940 132 і
і 1453 MACDONALD 25 5532 200 і
Файл отчета для примера 5 следующий:
і і
і Control File: case5.ctl і
і Data File: CASE5.DAT і
і Read Mode: System Record і
і Bad File: CASE5.BAD і
і Discard File: CASE5.DSC (Allow all discards) і
і і
і Number to load: ALL і
і Number to skip: 0 і
і Errors allowed: 50 і
і Bind array: 64 rows,maximum of 65336 bytes і
і Record Length: 80 (Buffer size allocated per logical reco і
і Continuation: none specified і
і і
і Table EMP,loaded from every logical record. і
і Insert option in effect for this table: REPLACE і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і ENAME 6:15 10 CHARACTER і
і DEPTNO 17:18 2 CHARACTER і
і MGR 20:23 4 CHARACTER і
і Table PROJ,loaded when PROJNO != ' ' і
і Insert option in effect for this table: REPLACE і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і PROJNO 5:27 3 CHARACTER і
і і
і Table PROJ,loaded when PROJNO != ' ' і
і Insert option in effect for this table: REPLACE і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і PROJNO 29:31 3 CHARACTER і
і і
і Table PROJ,loaded when PROJNO != ' ' і
і Insert option in effect for this table: REPLACE і
і і
і Column Name Position Len Term Encl Datatype і
і ----------- -------- --- ---- ---- ---------- і
і EMPNO 1:4 4 CHARACTER і
і PROJNO 3:35 3 CHARACTER і
і і
і Rejected logical records and errors: і
і і
і Data File CASE5.DAT - і
і і
і 1 Record 2: Rejected - Error on table EMP. і
і 1 ORA-0001: duplicate value in index і
і 1 Record 8: Rejected - Error on table EMP,column DEPTNO. і
і 1 ORA-1772: invalid number і
і 1 Record 3: Rejected - Error on table PROJ,column PROJNO. і
і 1 ORA-1772: invalid number і
і і
і Table EMP: і
і 2 9 Rows successfully loaded. і
і 2 3 Rows not loaded to data errors. і
і 2 0 Rows not loaded because all WHEN clauses were failed.і
і 2 0 Rows not loaded because all fields were null. і
і і
і Table PROJ: і
і 3 7 Rows successfully loaded. і
і 3 2 Rows not loaded to data errors. і
і 3 3 Rows not loaded because all WHEN clauses were failed.і
і 3 0 Rows not loaded because all fields were null. і
і і
і Table PROJ: і
і 4 7 Rows successfully loaded. і
і 4 3 Rows not loaded to data errors. і
і 4 2 Rows not loaded because all WHEN clauses were failed.і
і 4 0 Rows not loaded because all fields were null. і
і і
і Table PROJ: і
і 5 6 Rows successfully loaded. і
і 5 3 Rows not loaded to data errors. і
і 5 3 Rows not loaded because all WHEN clauses were failed.і
і 5 0 Rows not loaded because all fields were null. і
і і
і Space allocated for bind array: 3904 bytes (40 row) і
і Space otherwise allocated: 7568 bytes і
і і
і Total logical record skipped: 0 і
і Total logical record read 12 і
і Total logical record rejected: 3 і
і Total logical record discarded: 0 і
і і
і Run began on Tue Apr 14 12:13:36 1987 і
і Run ended on Tue Apr 14 12:13:46 1987 і
і і
і Elapsed time was: 00:00:09.28 і
і CPU time was: 00:00:01.16 і
EЗамечания:F
1.Ошибки печатаются не в том порядке,в каком
расположены физические записи,из-за буфериза-
ции.Файл отброшенных записей и файл пропущен-
ных записей будут содержать записи в том же по-
рядке,в каком они указаны в файле отчета.
2.Из 12 записей на входе 3 строки были отброшены
(строки для JOKER,YOUNG и EDDS).Никакие
данные не загружаются из отброшенных записей.
3.Девять записей удовлетворяют условию WHEN,
а две (JOKER и YOUNG) отброшены из-за ошибок
в данных.
4.Десять записей удовлетворяют условию WHEN,
а 3 (JOKER,YOUNG и EDDS) отброшены из-за
ошибок в данных.
5.Девять записей удовлетворяют условию WHEN,
а 3 (JOKER,YOUNG и EDDS) отброшены из-за
ошибок в данных.
Результат выполнения SQL*Loader следующий:
SQL> select empno,ename,mgr,deptno from emp;
EMPNO ENAME MGR DEPTNO
---------- ----------- ---------- ----------
1234 BAKER 9999 10
5321 OTOOLE 9999 10
2134 FARMER 4555 20
2414 LITTLE 5634 20
6542 LEE 4532 10
4532 PERKINS 9999 10
1244 HUNT 3452 11
123 DOOLITTLE 9940 12
1453 MACDONALD 5532 25
SQL> select * from proj order by empno;
EMPNO PROJNO
---------- ----------
123 132
1234 101
1234 103
1234 102
1244 665
1244 656
1244 133
1453 200
2134 236
2134 456
2414 236
2414 456
2414 40
4532 40
5321 321
5321 40
5321 55
6542 102
6542 14
6542 321
+ E ГЛАВА 3
СИНТАКСИС КОМАНДНОЙ СТРОКИ F
Эта глава описывает команду SQLLOAD,используемую
для вызова SQL*Loader,и ее аргументы.
E КОМАНДА SQLLOAD.F
SQL*Loader вызывается командой SQLLOAD,за которой
следуют различные аргументы.Если вы вызываете
SQLLOAD без аргументов,вы увидите сводку аргумен-
тов с кратким описанием и значениями по умолчанию.
Некоторые умолчания зависят от OC
и такой вызов позволяет увидеть умолчания,ис-
пользуемые в вашей ОС.
Пример такой сводки приведен ниже.В этом примере
приведены значения аргументов по умолчанию,не за-
висящие от ОС.
і і
і SQLLOAD і
і Usage: SQLLOAD keyword=value [,keyword=value,...] і
і і
і Использование: і
і SQLLOAD ключ.слово=значение [,ключ.слово=знач.,...] і
і і
і Правильные ключевые слова: і
і і
і userid -- имя пользователя ORACLE/пароль і
і control -- имя управляющего файла і
і log -- имя файла отчета і
і bad -- имя файла отброшенных записей і
і data -- имя файла данных і
і discard -- имя файла пропущенных записей і
і discardmax -- допустимое число пропущенных записей і
і (по умолчанию все) і
і skip -- число логических записей,пропущенных і
і до обработки (по умолчанию 0) і
і load -- число загружаемых записей (по умолчанию все) і
і errors -- допустимое число ошибок (по умолчанию 50) і
і rows -- число строк в связанном массиве і
і (по умолчанию 64) і
і bindsize -- размер связанного массива в байтах і
і (по умолчанию nnnnn) і
і silent -- подавление сообщений при выполнении і
і (заголовок,ошибки,пропущенные записи) і
Аргументы следуют за командой и необязательно
разделяются запятыми.Они могут вводиться 2-я
способами:
* в любом порядке с использованием ключевых слов
для идентификации аргументов
* в определенном порядке,без ключевых слов.
Например,следующие 2 командные строки полностью
эквивалентны:
sqlload control=foo.ctl,log=bar.log,bad=baz.bad,data=etc.dat,
userid=scott/tiger,errors=999,load=2000,discard=toss.dis,
discardmax=5
sqlload scott/tiger,foo.ctl,bar.log,baz.bad,etc.dat,
toss.dis,5,0,2000,999
Вы можете использовать позиционные аргументы,а
далее недостающие ключевые,но не наоборот.Так,
следующая команда правильная:
sqlload jane/pride,jobctl.ctl,discard=jobctl.dis,skip=1000
а такая неправильная:
sqlload skip=1000,jane/pride,jobctl.ctl,discard=jobctl.dis
E АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ F
Ниже приведено описание аргументов SQL*Loader.
EКлючевое Назначение Позиция
словоF
USERID идентификация пользователя 1
Имя пользователя ORACLE и пароль.Если опущены,
выдается подсказка.Если указан только слэш ("/"),
умолчание OPS$.Для загрузки в удаленную БД
д.б. указана строка спецификации БД SQL*Net.
CONTROL управляющий файл 2
Файл,описывающий,как загружать данные.Если рас-
ширение имени файла или тип файла не указаны,ис-
пользуется CTL.Если аргумент опущен,выдается
подсказка.
LOG файл отчета 3
Файл создается SQL*Loader и содержит информацию о
процессе загрузки.Если имя файла не указано,оно
принимается по умолчанию.Если расширение имени
или тип файла не указаны,используется LOG.
BAD файл отброшенных записей 4
Файл создается SQL*Loader и содержит записи,в ко-
торых обнаружены ошибки при загрузке или нарушен
формат данных.Если имя файла не указано,исполь-
зуется имя управляющего файла.Если расширение
имени или имя файла не указаны,используется BAD.
Этот файл имеет тот же формат,что и файл данных,
поэтому он м.б. повторно загружен с тем же
управляющим файлом после того,как выполнены необ-
ходимые корректировки.
DATA файл данных 5
Этот файл содержит загружаемые данные.Если имя
файла не указано,оно принимается по умолчанию.
Если расширение имени или тип файла не указаны,
используется DAT.Данные м.б. также включены
непосредственно в управляющий файл.
DISCARD Файл пропущенных записей 6
Необязательный файл,который создается,если указан
аргумент DISCARD или DISCARDMAX.В этот файл зано-
сятся записи,которые ни отброшены,ни вставлены в
загружаемую таблицу.Если имя файла не указано,по
умолчанию принимается имя управляющего файла.Если
расширение имени или тип файла не указаны,исполь-
зуется DSC.
Этот файл имеет тот же формат,что и файл данных,
поэтому он м.б. повторно загружен с тем же
управляющим файлом после того,как выполнены необ-
ходимые корректировки.
DISCARDMAX Допустимое число 7
пропущенных записей
Указывает,сколько записей допускается пропустить,
прежде чем загрузка будет прервана.По умолчанию
все.Чтобы прервать загрузку на первой пропущенной
записи,нужно указать ноль (0).
SKIP Число записей, 8
пропущенных до обработки
Указывает число логических записей с начала файла,
которые нужно пропустить перед загрузкой.По умол-
чанию ноль.
LOAD Число загружаемых записей 9
Максимальное число загружаемых логических записей
(не считая записей, указанных аргументом SKIP).
По умолчанию все записи д.б. загружены.Ес-
ли файл данных содержит меньше записей,ошибка не
сигнализируется.
ERRORS Допустимое число ошибок 10
Указывает,сколько ошибок допускается,прежде чем
загрузка будет прервана.По умолчанию 50.Чтобы
прервать загрузку на первой ошибке,нужно указать
ноль (0).Чтобы разрешить все ошибки,нужно ука-
зать достаточно большое число.
ROWS Число строк в связанном массиве 11
Число строк в буфере для выполнения нескольких
включений за одну операцию COMMIT.По умолчанию 64
BINDSIZE Максимальный размер в байтах 12
Максимальный размер связанного массива в байтах.
Этот размер отвергает значение по умолчанию (зави-
сящее от ОС),а также значение,
вычисленное на основе ROW.
SILENT Подавление 13
Используйте соответствующие ключевые слова для по-
давления:
HEADER Заголовка SQL*Loader.
FEEDBACK Feedback в каждой точке COMMIT.
ERRORS Сообщений в файле отчета о каждой за-
писи,вызывающей ошибку ORACLE (число
отброшенных записей по прежнему будет
указано).
DISCARDS Сообщений в файле отчета о каждой за-
писи,помещенной в файл пропущенных
записей.
ALL Выполняет все перечисленное выше.
E ИСПОЛЬЗОВАНИЕ КЛЮЧЕВОГО СЛОВА OPTIONS В УПРАВЛЯЮЩЕМ ФАЙЛЕ F
Ключевое слово OPTIONS удобно использовать,если
вы всегда вызываете SQL*Loader c одним и тем же
управляющим файлом и постоянным набором аргумен-
тов,если командная строка с аргументами становит-
ся очень длинной или просто для сокращения времени
выполнения SQL*Loader.
Ключевое слово OPTIONS позволяет указать аргументы
выполнения SQL*Loader в управляющем файле,а не в
командной строке.Используйте OPTIONS для указания
следующих аргументов:
SKIP = n
LOAD = n
ERRORS = n
ROWS = n
BINDSIZE = n
SILENT = {HEADER | FEEDBACK | ERRORS |
DISCARDS | ALL}
Замечание: Указание SILENT HEADER не создает ника-
кого эффекта,так как к моменту обработки управля-
ющего файла заголовок уже будет выведен.
Например, OPTIONS (BINDSIZE=100000,SILENT=FEEDBACK)
Аргументы,указанные в управляющем файле ключевым
словом OPTIONS,отвергают значения этих же аргу-
ментов,указанные в командной строке.
E СООБЩЕНИЯ,ВЫДАВАЕМЫЕ SQL*LOADER F
При выполнении SQL*Loader вы увидите подобное сообщение:
і і
і SQL*Loader: Version 1.0.14 - Production on Tue Feb 24 15:07:23 і
і Copyright (c) 1986,Oracle Corporation,California,USA і
і All rights reserved і
і і
і Commit point reached - record count 20 і
либо вы увидите сообщение об ошибке:
і і
і SQL*Loader: Version 1.0.14 - Production on Tue Feb 24 15:07:23 і
і Copyright (c) 1986,Oracle Corporation,California,USA і
і All rights reserved і
і і
і SQL*Loader-641: Non-recoverable ORACLE error occurred і
і ORA-0704: invalid column name і
і Error occured on SQL insert statement for table EMP і
і Your use of column loadseq is possibly in error і
Ошибки также выдаются в файл отчета.В приложении
А приведена информация о предупреждениях и сообще-
ниях об ошибках SQL*Loader.
Вы можете подавить заголовок и feedback,используя
опцию SILENT в командной строке:
SILENT=(HEADER,FEEDBACK)
+ E ГЛАВА 4
СИНТАКСИС УПРАВЛЯЮЩЕГО ФАЙЛА F
Эта глава описывает язык загрузки данных
SQL*Loader,который используется при подготовке
управляющего файла.Несколько примеров управляющих
файлов приведено в главе 2.
E СОЗДАНИЕ УПРАВЛЯЮЩЕГО ФАЙЛА F
Управляющий файл содержит следующую информацию:
* где находятся загружаемые данные.Указывается
либо имя файла (файлов) данных в операторе
INFILE,либо начало данных в управляющем файле
оператором BEGINDATA.Если ни INFILE,ни
BEGINDATA не используются,имя файла данных оп-
ределяется по аргументам командной строки.
* какие таблицы БД д.б. загружены;
используется оператор INTO TABLE
* соответствие между полями файла данных и колон-
ками таблиц БД,как часть оператора LOAD DATA.
Общие правила подготовки управляющего файла следующие:
* Файл готовится в свободном формате.Так,опера-
тор может продолжаться со строки на строку и за-
нимать несколько строк,начинающихся с любого
слова
* Файл готовится на верхнем или нижнем регистре.
Регистр имеет значение только для строк,заклю-
ченных в кавычки
* Допускаются комментарии в любой строке.Они на-
чинаются двойным тире.SQL*Loader игнорирует лю-
бой текст от двойного тире до конца строки.
Однако комментарии не могут появляться в файле
данных или области данных управляющего файла.В
этих случаях двойное тире рассматривается как
часть данных.
* Ключевое слово SQL*Loader м.б. указано в
кавычках,если вы желаете использовать его как
имя таблицы или колонки.
E СИНТАКСИС ОПЕРАТОРА LOAD DATA F
Управляющий файл обычно начинается фразой
LOAD DATA,за которой следуют несколько фраз,опи-
сывающих загружаемые данные.(Только комментарии
или оператор OPTIONS может предшествовать операто-
ру LOAD DATA).
ELOAD DATA:F полный синтаксис управляющего оператора:
і і
і OPTIONS (options) і
і і
і LOAD [DATA] і
і [ { INFILE | INDDN } { filename | * } і
і [ STREAM | RECORD | FIXED len і
і [ BLOCKSIZE size ] | VARIABLE [len] ] ] і
і [ { BADFILE | BADDN } filename ] і
і [ { DISCARDFILE | DISCARDDN } filename ] і
і [ { DISCARDS | DISCARDMAX } n ] і
і і
і [ { INDDN | INFILE } ...] і
і і
і [ APPEND | REPLACE | INSERT ] і
і [ RECLEN n ] і
і [ { CONCATENATE n | CONTINUEIF і
і { [THIS | NEXT] (start[:end]) | LAST } і
і operator {'char_str' | X'hex_str'} } ] і
і і
і INTO TABLE tablename і
і [ APPEND | REPLACE | INSERT ] і
і [ WHEN field_condition [ AND field_condition ...]] і
і [ FIELDS [delimiter_spec] ] і
і ( і
і column_name і
і { і
і RECNUM | і
і CONSTANT value | і
і SEQUENCE ( { n | MAX | COUNT } [ ,increment ] ) | і
і [ POSITION ( { start [:end] | * [+n] })] datatype_specі
і [ NULLIF field_condition ] і
і [ DEFAULTIF field_condition ] і
і } і
і [ ,...] і
і ) і
і [ INTO TABLE ...] і
і і
і [ BEGINDATA ] і
Оptions Допустимые опции:
LOAD SKIP ERRORS ROWS BINDSIZE SILENT
Может быть использована любая комбинация опций.
Опции указываются в следующем формате:
OPTIONS ( ROWS=200,SILENT= (HEADER,FEEDBACK) )
Заметьте,что SILENT=HEADER,указанное в OPTIONS,
не будет иметь никакого эффекта.Заголовок к этому
моменту уже будет напечатан.Чтобы подавить заго-
ловок,вы должны указать это в командной строке.
EОperatorsF Допустимые операторы,указывающие "равно" и "не
равно":
= != ї= <>
EField_ F Условие для поля указывается следующим образом:
EconditionF
{ ( start [:end ] ) | columnname } operator
{ 'char_string' | X'hex_byte_string' }
Замечание: "символьная строка" и "шестнадцатерич-
ная строка" м.б. заключена либо в простые,
либо в двойные кавычки.
EDatatype_F Указывается один из следующих типов данных:
Espec F
CHAR [ ( length ) ] [ delimiter_spec ]
DATE [ ( length ) ] [ mask ] [ delimiter_spec ]
VARCHAR [ ( length ) ]
SMALLINT
DOUBLE
GRAPHIC [EXTERNAL] [(length)]
{INTEGER | FLOAT | DECIMAL} EXTERNAL [ ( length ) ]
INTEGER [ ( length ) ]
FLOAT [ ( length ) ]
DECIMAL ( digits [ ,precision ] )
VARGRAPHIC [ ( length ) ]
EDelimiter_F Ограничители указываются в следующем формате:
Espec F
[ TERMINATED [ BY ] { WHITESPACE | [X] 'char' } ]
[ [ OPTIONALLY ] ENCLOSED [ BY ] [X] 'char' ]
Замечание: переменная char м.б. заключена
либо в простые,либо в двойные кавычки.Если ис-
пользуется X'char',то char рассматривается как
символ ASCII в 16-м формате.Ключевое
слово TERMINATED (ограничен) должно следовать пе-
ред ключевым словом ENCLOSED (заключен).
E Указание файла данных F
Для полного определения файла данных нужно указать
имя файла и (необязательно) режим чтения файла.Вы
можете определить несколько файлов,используя нес-
колько операторов INFILE.
EИмя файлаF Для указания файла,содержащего загружаемые дан-
ные,используется ключевое слово INFILE или INDDN,
за которым следует имя файла и (необязательно) ре-
жим чтения файла.Имя файла,указанное в INFILE
или INDDN,отвергает имя файла,указанное в ко-
мандной строке.Если имя файла не указано,по
умолчанию принимается имя управляющего файла с
расширением имени или типом файла DAT.Если загру-
жаемые данные находятся в управляющем файле,то
вместо имени файла нужно указать "E*F".
{ INFILE | INDDN } { filename | * }
EINFILE или INDDN.F Любое ключевое слово можно ис-
пользовать.
Efilename.F Имя файла,содержащего загружаемые дан-
ные.Можно использовать любое имя файла,допусти-
мое в ОС.Оно м.б. заклю-
чено в двойные кавычки.Если имя содержит пробел
или знаки пунктуации,кавычки обязательны.
E*.F Используется вместо имени файла,чтобы указать,
что данные находятся в управляющем файле.
EРежим чтенияF Может быть задан режим чтения файла.Он указывает
Eфайла F SQL*Loader,как открыть файл данных и обрабатывать
физические записи,содержащиеся в нем.Этот режим
используется,чтобы обеспечить максимальную сов-
местимость на большом множестве OC,которые поддерживает
ORACLE.
STREAM | RECORD | FIXED len [ BLOCKSIZE size ] | VARIABLE [ len ]
ESTREAM.F Файл данных трактуется как поток последо-
вательных байтов.
Символы читаются один за другим.Физические записи
оканчиваются символом "новая строка".
ERECORD.F По умолчанию RECORD указывает,что
SQL*Loader должен использовать механизм управления
файлами/записями ОС.RECORD -
это единственный режим,который допускается,если
вместо имени файла указана "E*F".Поэтому если дан-
ные находятся в управляющем файле,режим чтения
указывать необязательно.
EFIXED len.F Логические записи имеют фиксированную
длину len.Очередная запись получается чтением len
байтов прямо из файла.Заметьте,что FIXED отно-
сится к формату физической записи; поля в записи
могут храниться в свободном формате.BLOCKSIZE
можно указывать,если данные загружаются прямо с
ленты.
EVARIABLE [len].F Длина записи содержится в первых
2 байтах.Сначала читается длина записи,а за-
тем сама запись.Предполагается,что первые 2
байта не являются частью записи.Длина len может
указываться для размещения буферов.Для эффектив-
ности нужно указать длину,достаточную для чтения
любой записи.Если длина не указана,выделяется 8К
байтов,что может привести к нарушению ограничений
ОС на используемую память.
Замечание: Не все режимы чтения файла используются
в различных ОС.В общем,если в
ОС отсутствует система управле-
ния записями,то режим чтения RECORD совпадает с
режимом STREAM.
E Указание нескольких файлов данных F
Для загрузки данных из нескольких файлов данных за
один прогон SQL*Loader нужно использовать оператор
INFILE для каждого файла данных.Эти файлы не обя-
зательно должны иметь одинаковый режим чтения;
один м.б. STREAM,другой FIXED,а третий мо-
жет описывать данные в управляющем файле.
Для каждого файла данных можно дополнительно ука-
зать два файла: файл пропущенных записей и файл
отброшенных записей.Имена этих файлов указываются
после имени соответствующего файла данных.Следую-
щий фрагмент управляющего файла содержит правиль-
ные операторы для 4-х файлов данных:
INFILE mydat1.dat BADFILE mydat1.bad DISCARDFILE mydat1.dis
INFILE mydat2.dat
INFILE mydat3.dat DISCARDFILE mydat3.dis
INFILE mydat4.dat DISCARDMAX 10
Для первого файла данных (MYDAT1.DAT) имена файла
отброшенных записей и файла пропущенных записей
указаны явно,поэтому оба файла будут созданы.Для
второго файла данных (MYDAT2.DAT) ни один из фай-
лов не указан,поэтому только файл отброшенных за-
писей будет создан,с именем файла и расширением
по умолчанию.Для 3-го файла (MYDAT3.DAT) по
умолчанию будет создан файл отброшенных записей;
файл пропущенных записей,явно указанный,также
будет создан.Для четвертого файла (MYDAT4.DAT) по
умолчанию будет создан файл отброшенных записей;
так как используется опция DISCARDMAX,SQL*Loader
предполагает,что нужен файл пропущенных записей
и создает его с именем по умолчанию (MYDAT4.DSC).
Ниже приведены примеры определения файлов данных:
INFILE *
указывает,что данные содержатся в самом управляю-
щем файле.
INFILE WHIRL
указывает,что данные содержатся в файле с именем
WHIRL и подразумеваемое расширение или тип файла
DAT.
INFILE test3.dat STREAM
указывает,что данные содержатся в файле с именем
test3.dat в формате потоком.
INFILE "JULYREV.MJB"
указывает,что данные содержатся в файле с именем
"JULYREV.MJB" с записями фиксированной длины.
INDDN "DAT0787.DAT" FIXED 80 BLOCKSIZE 1024
указывает,что данные содержатся в файле с именем
"DAT0787.DAT" с записями фиксированной длины.Файл
находится на ленте,длина блока - 1024 байта.
E Указание файла отброшенных записей F
При выполнении SQL*Loader создает файл,в который
он помещает записи,содержащие ошибки формата или
вызывающие ошибки ORACLE.Чтобы определить имя
этого файла,используйте ключевое слово BADFILE
или BADDN,за которым следует имя файла.Если имя
файла опущено,по умолчанию принимается имя файла
данных,но с расширением имени или типом файла
BAD.Имя файла отброшенных записей,указанное в
управляющем файле,отвергает имя из командной
строки.
Файл отброшенных записей создается с таким же ре-
жимом чтения и с тем же форматом,что и файл дан-
ных.Если файл с таким именем уже существует,то в
зависимости от ОС либо он пере-
писывается,либо создается новая версия его.
[ BADFILE | BADDN ] filespec
EBADFILE или BADDN.F Любое ключевое слово можно ис-
пользовать.
Efilespec.F Любое допустимое имя файла,которое оп-
ределяет файл отброшенных записей.Этот файл всег-
да создается,даже если ни одной записи не отбро-
шено.
Ниже приведены примеры определения файлов отбро-
шенных записей:
BADFILE UGN
указывает,что имя файла отброшенных записей UGN
и подразумеваемое расширение или тип файла BAD.
BADDN BAD0001.REJ
указывает,что имя файла отброшенных записей
BAD0001 и расширение или тип файла REJ.
E Указание файла пропущенных записей F
При выполнении SQL*Loader создает файл,в который
он помещает записи,не прошедшие условия отбора.
Эти записи называются пропущенными,в отличие от
отброшенных записей.Пропущенные записи не обяза-
тельно содержат неверные данные,это записи,кото-
рые просто не выбраны для загрузки.Они не удов-
летворяют условию отбора,заданному в некотором
предложении WHEN для некоторой загружаемой табли-
цы.Если же запись была вставлена в какую-либо
таблицу (или это не выполнилось из-за ошибок в
данных),она не помещается в файл пропущенных за-
писей.Вы можете выбрать,создавать или не созда-
вать файл пропущенных записей.Чтобы создать его,
используйте любую из опций:
В управляющем файле: В командной строке:
DISCARDFILE filename DISCARD
DISCARDDN filename DISCARDMAX
DISCARDS
DISCARDMAX
Если ни одна из указанных опций не используется,
файл пропущенных записей не создается.Обратите
внимание,что использование файла пропущенных за-
писей м.б. потребовано прямо - опцией,опре-
деляющей его имя,либо косвенно - определением
максимального числа пропущенных записей.
Чтобы определить имя файла,используйте ключевое
слово DISCARDFILE или DISCARDDN,за которым следу-
ет имя файла.
[ DISCARDFILE | DISCARDDN ] filespec
EDISCARDFILE или DISCARDDN.F Любое ключевое слово
можно использовать.
Efilespec.F Любое допустимое имя файла,которое оп-
ределяет файл пропущенных записей.
Для имени файла по умолчанию принимается имя файла
данных,но с расширением имени или типом данных
DSC.Имя файла пропущенных записей,указанное в
управляющем файле,отвергает имя из командной
строки.Если файл с таким именем уже существует,
то в зависимости от ОС либо он
переписывается,либо создается новая версия его.
Файл пропущенных записей создается с таким же ре-
жимом чтения и с тем же форматом,что и файл дан-
ных,поэтому он м.б. легко использован для
последующей загрузки с имеющимся управляющим фай-
лом (после изменения условий отбора в предложениях
WHEN).
Файл пропущенных записей создается только в том
случае,если это потребовано.
Ниже приведены примеры определения файлов пропу-
щенных записей:
DISCARDFILE CIRCULAR
указывает,что имя файла пропущенных записей
CIRCULAR и подразумеваемое расширение или тип фай-
ла DSC.
discardfile forget.me
указывает,что файл пропущенных записей имеет имя
forget и расширение имени или тип файла me.
DISCARDDN NOTAPPL.MAY
указывает,что файл пропущенных записей имеет имя
NOTAPPL и расширение имени или тип файла MAY.
EОграничениеF Вы можете ограничить число пропущенных записей из
Eчисла F файла данных следующим образом:
EпропущенныхF [ DISCARDMAX | DISCARDS ] n
Eзаписей F где n - целое число.
Если указанный лимит достигнут,то обработка файла
данных прекращается и начинает обрабатываться сле-
дующий файл данных,если он существует.
Указанное максимальное число пропущенных записей
одно и то же для всех файлов данных.Оно может
также указываться после имени файла и в этом слу-
чае относится только к этому файлу.
Если указывается максимальное число пропущенных
записей,но имя файла не определяется,SQL*Loader
создает файл пропущенных записей,используя расши-
рение имени или тип файла по умолчанию.
E Перезапись или добавление записей в существующую таблицу F
Замечание: Этот раздел соответствует ключевому
слову RESUME утилиты DB2; пользователи DB2 могут
также обратиться к описанию RESUME в Приложении B.
Если таблица,которую вы загружаете,уже содержит
данные,вы имеете 3 возможности при выполнении
SQL*Loader:
* Загрузить ваши данные несмотря на то,что табли-
ца уже содержит данные.
* Заменить любые существующие данные вашими.
* Загрузить данные,если только таблица пуста.Ес-
ли в это случае таблица содержит данные,то возни-
кает ошибка и загрузка прекращается (Эта возмож-
ность используется по умолчанию).
Итак для каждой загружаемой таблицы вы можете ука-
зать одну из следующих опций:
[ APPEND | REPLACE | INSERT ]
EAPPEND.F Если в таблице уже существуют данные,то
SQL*Loader добавляет новые строки в нее.Если в
таблице данных нет,новые строки просто загружают-
ся.
EINSERT.F Значение по умолчанию.Требует,чтобы таб-
лица была пуста перед загрузкой.Если таблица со-
держит строки,то SQL*Loader возвращает ошибку и
прекращает выполнение.
EREPLACE.F Если в таблице уже существуют данные,то
SQL*Loader заменяет их новыми строками.Если в та-
блице данных нет,новые строки просто загружаются.
Таким образом,старые строки теряются.Этот аргу-
мент требует,чтобы пользователь,вызывающий
SQL*Loader,имел полномочия DELETE для таблицы.Вы
не можете восстановить данные,которые содержались
в таблице до загрузки,если только они не были со-
хранены утилитой EXPORT или каким-нибудь другим
способом.
Вы можете использовать одну опцию для всех загру-
жаемых таблиц,помещая ее перед всеми предложения-
ми INTO TABLE.Либо вы можете указать опцию для
отдельной таблицы,помещая ее после требуемого
предложения INTO TABLE.В первом случае опция дей-
ствует для всех таблиц,не имеющих своих собствен-
ных опций.
E Установка максимальной длины логических записей F
Используя ключевое слово RECLEN,за которым следу-
ет максимальная длина,вы можете обеспечить доста-
точный размер буфера,размещенного для полной ло-
гической записи.Это особенно важно в том случае,
когда SQL*Loader не может определить длину по ре-
жиму чтения или из описания позиций для колонок в
данных.Иначе,если логическая запись слишком
длинна и SQL*Loader обнаруживает ошибку посредине
записи,только фактически прочитанная часть записи
помещается в файл отброшенных записей.Если вы хо-
тите,чтобы логическая запись была записана в файл
отброшенных записей целиком,вы должны указать
достаточную максимальную длину.
RECLEN len
Elen.F Максимальная длина логической записи (целое).
По умолчанию 80 для файлов с записями фиксирован-
ной длины и вычисляется для файлов с записями пе-
ременной длины.Если длина записи,помещенная в
файл отчета,отличается от ожидаемой вами,то фак-
тически это размер буфера,вычисленный SQL*Loader,
а не число байтов,прочитанных из каждой записи.
E Формирование логической записи из нескольких физических F
Вы можете создать одну логическую запись из нес-
кольких физических записей несколькими способами,
используя одно из ключевых слов в зависимости от
характера ваших данных:
CONCATENATE
CONTINUEIF
CONCATENATE используется в простейшем случае,ког-
да SQL*Loader должен объединять одно и то же число
физических записей,чтоды создать одну логическую.
Синтаксис:
CONCATENATE n
где n - целое число,указывающее,сколько физичес-
ких записей нужно объединять.
Если число физических записей,из которых создает-
ся одна логическая запись,изменяется,то нужно
использовать CONTINUEIF.За этим ключевым словом
следует условие,которое проверяется для каждой
физической записи,как только она прочитана.На-
пример,две записи м.б. объединены,если в
позиции 80 первой записи содержится символ #.
Если же в этом месте находится любой другой сим-
вол,то вторая запись не будет объединяться с пер-
вой.Полный синтаксис ключевого слова CONTINUEIF
имеет еще большую гибкость:
CONTINUEIF { [ THIS | NEXT ] (start [:end]) | LAST }
operator { 'char_str' | X'hex_str' }
ETHIS.F Если условие в текущей записи верно,то чи-
тается следующая физическая запись и присоединяет-
ся к текущей записи.Это продолжается до тех пор,
пока условие в записи верно.Если же условие в те-
кущей записи ошибочно,то текущая физическая за-
пись считается последней физической записью в фор-
мируемой логической записи.THIS используется по
умолчанию.
ENEXT.F Если условие в следующей записи верно,то
тогда следующая физическая запись объединяется с
текущей записью.Это продолжается до тех пор,по-
ка условие в записи верно.Если же условие в сле-
дующей записи ошибочно,то текущая физическая за-
пись считается последней физической записью в фор-
мируемой логической записи.
Estart:end.F Указывает начальную и конечную позиции
в физической записи.Позиции нумеруются с первой.
Допускается использовать двоеточие или дефис
(start:end или start-end).
Если вы опустите end,длина поля продолжения счи-
тается равной длине строки байтов или символов.
Если вы используете end и длина получившегося поля
продолжения не равна длине строки байтов или сим-
волов,более короткое дополняется справа ( сим-
вольная строка - пробелами,шестнадцатеричная -
нулями).
ELAST.F Это условие аналогично THIS,но проверяется
всегда последний отличный от пробела символ.Если
этот символ в текущей записи удовлетворяет усло-
вию,то следующая физическая запись читается и
объединяется с текущей записью.Это продолжается
до тех пор,пока условие в записи верно.Если же
условие в текущей записи ошибочно,то текущая фи-
зическая запись считается последней физической за-
писью в формируемой логической записи.
Eoperator.F Допустимыми операторами являются "равно"
и "не равно":
= != ї= <>
В случае "равно" условие верно,если поле и строка
сравнения в точности совпадают.В случае "не рав-
но" они могут отличаться любым символом.
Echar string.F Строка символов,сравниваемая с полем
продолжения,определенным start и end,в зависи-
мости от оператора.Строка д.б. заключена в
простые или двойные кавычки.Сравнение выполняется
символ за символом,более короткая строка дополня-
ется справа пробелами.
EX'hex string'.F Строка байтов в шестнадцатеричном
формате импользуется таким же образом,как и сим-
вольная строка,рассмотренная выше.Так,строка
X'1FB033' представляет 3 байта со значениями
1F,B0,33 (шестнадцатеричные).
EЗАМЕЧАНИЕ:F позиции записи,указанные в предложении
CONTINUEIF,относятся к каждой физической записи.
Это единственная возможность ссылаться на позиции
физической записи.Все другие ссылки относятся к
логическим записям.
Для CONTINUEIF THIS и CONTINUEIF NEXT поле продол-
жения удаляется из каждой физической записи до
формирования логической записи.Это позволяет эле-
ментам данных располагаться в записях без посто-
ронних символов (символов продолжения) в середине.
Следующие 2 примера показывают использование
CONTINUEIF THIS и CONTINUEIF NEXT:
CONTINUEIF THIS CONTINUEIF NEXT
(1:2) = '%%' (1:2) = '%%'
В следующих четырех записях точки обозначают сим-
вол пробела:
%%aaaaaaaa ..aaaaaaaa
%%bbbbbbbb %%bbbbbbbb
..cccccccc %%cccccccc
%%dddddddd ..dddddddd
Сформированная запись будет одной и той же в обоих
случаях:
aaaaaaaabbbbbbbbcccccccc
Заметим,что CONTINUEIF LAST отличается от
CONTINUEIF THIS и CONTINUEIF NEXT тем,что символ
продолжения EнеF удаляется из физических записей.
Примеры CONTINUEIF:
CONTINUEIF THIS (1) = "*"
указывает,что если текущая физическая запись
(запись-1) содержит звездочку в позиции 1,то сле-
дующая физическая запись (запись-2) д.б.
присоединена к ней.Если запись-2 содержит звез-
дочку в позиции 1,то так же присоединяется и за-
пись-3.
Если запись-2 не содержит звездочку в позиции 1,
то она все равно будет присоединена к записи-1,но
запись-3 уже начнет новую логическую запись.
CONTINUEIF LAST = ","
указывает,что если текущая физическая запись
(запись-1) содержит запятую в последней отличной
от пробела позиции,то следующая физическая запись
(запись-2) будет присоединена к ней.Если запись-1
не содержит запятую в последней позиции,то это
последняя физическая запись в формируемой логичес-
кой записи.
CONTINUEIF NEXT (7:8) = "10"
указывает,что если следующая физическая запись
(запись-2) содержит "10" в позициях 7 и 8,то она
д.б. присоединена к предыдущей физической
записи (записи-1).Если же запись не содержит "10"
в позициях 7 и 8,то она нечнет новую логическую
запись.
E Определение таблиц и колонок F
Раздел оператора LOAD DATA,в котором определяются
таблицы,колонки и типы данных,называется блоком
INTO TABLE.Чтобы загрузить несколько таблиц,вы
должны включить по одному блоку INTO TABLE для
каждой загружаемой таблицы.
EУказание F Блок INTO TABLE начинается ключевыми словами INTO
Eимен таблицF TABLE,за которыми следует имя таблицы ORACLE,
принимающей данные.
INTO TABLE tablename [ INSERT | APPEND | REPLACE ]
Таблица должна уже существовать.Имя таблицы д.б. заключено в
двойные кавычки,если оно сов-
падает с ключевым словом SQL или SQL*Loader,если
оно содержит специальные символы или если просто
есть желание.
INTO TABLE SCOTT."COMMENT"
INTO TABLE SCOTT."comment"
INTO TABLE SCOTT."-COMMENT"
Имя пользователя,выполняющего SQL*Loader,должно
иметь полномочия INSERT для таблицы,а если поль-
зователь не является владельцем таблицы,имя вла-
дельца должно указываться перед именем таблицы:
INTO TABLE SOPHIA.EMP
Блок INTO TABLE может содержать ряд опций для заг-
рузки таблицы.Например,вы можете указать различ-
ные опции (INSERT,APPEND,REPLACE) для каждой
таблицы в зависимости от того,что SQL*Loader дол-
жен делать,если в таблице уже имеются данные.
EВыбор записейF Вы можете выбрать: или загрузить,или пропустить
Eдля загрузки F логическую запись - используя предложение WHEN для
проверки условия в записи.
Предложение WHEN указывается после имени таблицы и
содержит одно или несколько условий.
WHEN (field_condition) [ AND (field_condition) ] ...
Efield_condition.F Условие для поля.Это условие
аналогично условию в предложении CONTINUEIF,но
имеет два важных отличия.Во-первых,позиции ссы-
лаются на логическую запись,а не на физическую.
Во-вторых,вы можете указывать либо позиции в ло-
гической записи,либо имена колонок в загружаемой
таблице.После того,как значение колонки опреде-
лено,проверяется условие WHEN.Строка будет вста-
влена в таблицу только в том случае,если условие
WHEN выполняется.В следующем примере указывается,
что каждая запись со значением "q" в 5-й колонке
д.б. загружена:
WHEN (5) = 'q'
Предложение WHEN может содержать несколько усло-
вий,соединенных связкой AND.Скобки необязатель-
ны,но могут использоваться для ясности в случае
нескольких условий.Например:
WHEN ( DEPTNO = '10' ) AND ( JOB = 'SALES' )
EУказаниеF Условие для поля - это условие,проверяемое на
Eусловия F основе логической записи.Оно используется в пред-
Eдля поляF ложениях WHEN,NULLIF и DEFAULTIF.
{ ( start [:end] ) | column_name } operator
{ 'char_string' | X'hex_string' }
Условие для поля указывается следующим образом:
Estart.F Указывает начальную позицию поля сравнения
в логической записи.
Eend.F Указывает конечную позицию поля сравнения
в логической записи.
Допускается использовать двоеточие или дефис
(start:end или start-end).
Если вы опустите end,длина поля считается равной
длине строки сравнения.Если длины отличаются,то
более короткая строка дополняется справа ( сим-
вольная строка - пробелами,16-ая - нулями).
Ecolumn_name.F Имя колонки в таблице БД.
Если имя колонки используется вместо start:end,
то спецификация для этой колонки используется,
чтобы определить поле сравнения.Column_name дол-
жно в точности совпадать с именем колонки из опре-
деления таблицы в БД.Заключите имя ко-
лонки в кавычки,если оно совпадает с ключевым
словом SQL или SQL*Loader,если оно содержит спе-
циальные символы или если просто есть желание.
Eoperator.F Допустимыми операторами являются "равно"
и "не равно":
= != ї= <>
Echar string.F Строка символов,заключенная в прос-
тые или двойные кавычки,сравнивается с полем сра-
внения.Если сравнение верно,то строка вставляет-
ся в таблицу.
EX'hex string'.F Строка байтов в 16-ом
формате используется таким же образом,как и сим-
вольная строка,рассмотренная выше.
EУказание F Если все поля данных разделены одинаковым символом
EтерминатораF (терминатором) в файле данных,вы можете использо-
Eданных F вать ключевое слово FIELDS для указания терминато-
ра по умолчанию.Вы можете также определить необя-
зательный ограничитель (символ,ограничивающий с
2сторон строки).Синтаксис:
FIELDS [ TERMINATED [ BY ] { WHITESPACE | [X] 'char' } ]
[ [ OPTIONALLY ] ENCLOSED [ BY ] [X] 'char' ]
Вы можете переопределить разделитель для любой за-
данной колонки,указывая его после имени колонки
(см.Пример 3).Смотрите "Определение символьных
данных с ограничителями" для более подробной ин-
формации об ограничителях.
EОпределениеF Любое число колонок таблицы м.б. загружено.
Eколонок F Любая колонка,определенная в БД,но не
указанная в управляющем файле,получает пустое
значение (это простейший способ вставить пустые
значения).
Определение колонок должно быть заключено в круг-
лые скобки,и каждое определение колонки отделяет-
ся от следующего запятой.Определение колонки со-
держит имя колонки,за которым следует специфика-
ция для значения,вставляемого в таблицу для этой
колонки.Если значение должно читаться из файла
данных,спецификация содержит позицию,тип данных,
параметр пустого поля и значение по умолчанию.Ес-
ли значение генерирует SQL*Loader,это либо ключе-
вые слова RECNUM,CONSTANT,либо функция SEQUENCE.
Список колонок заключается в круглые скобки и раз-
деляется запятыми.
( columnspec,columnspec,...)
Каждое имя колонки должно соответствовать колонке
в таблице,указанной в предложении INTO.Имя ко-
лонки д.б. заключено в кавычки,если оно
совпадает с ключевым словом SQL или SQL*Loader,
если оно содержит специальные символы или если
просто есть желание.
EУстановка F Чтобы установить для колонки значение константы,
Eзначения F используйте ключевое слово CONSTANT c необходимым
Eколонки F значением:
Eк константеF CONSTANT value
Вы можете заключить значение в кавычки.Это обя-
зательно,если значение содержит символ whitespace
или зарезервированное слово.Будьте внимательны
при указании допустимого назначения; если назначе-
ние неверно,каждая строка будет отброшена.
Не используйте ключевое слово CONSTANT для уста-
новки пустого значения.Вообще не назначайте или
не указывайте эту колонку.
ORACLE автоматически присваивает пустое значение
для колонки,если она не определена никаким спосо-
бом.Комбинация "CONSTANT - значение" представляет
полное описание колонки.
EУстановка F Используйте ключевое слово RECNUM после имени ко-
Eзначения F лонки для установки значения колонки равному номе-
Eколонки F ру логической записи,из которой данная строка за-
Eк номеру F гружается.Записи нумеруются последовательно с на-
Eзаписи в F чала первого файла данных,начиная с номера 1.
Eфайле данныхF RECNUM увеличивается для каждой формируемой логи-
ческой записи,которая пропускается до обработки,
пропускается при обработке,отбрасывается или за-
гружается.Так,если вы используете опцию SKIP=10,
то первая загруженная запись будет иметь значение
RECNUM=11.
Комбинация "имя колонки - RECNUM" представляет
полное описание колонки:
column_name RECNUM
EФормированиеF Функция SEQUENCE м.б. использована,чтобы
Eуникального F обеспечить уникальное значение для любой отдельной
Eпоследова- F колонки.SEQUENCE возрастает для каждой записи,
Eтельного F которая загружается или отбрасывается.Она не воз-
Eномера F растает для пропускаемых записей.Она имеет 2
аргумента.Первый - начальное значение,второй -
шаг возрастания.Если начальное значение есть це-
лое положительное n,то первая запись,добавляемая
в таблицу,будет иметь значение n для этой колон-
ки; значение для следующей строки будет увеличено
на шаг.
Комбинация "имя колонки - функция SEQUENCE" пред-
ставляет полное описание колонки:
column_name SEQUENCE ( { n | MAX | COUNT } [ ,increment ] )
ESEQUENCE.F Функция SEQUENCE используется для опре-
деления значения колонки.
En.F Указывает начальное значение n.
ECOUNT.F В качестве начального значения принимается
число строк,уже имеющихся в таблице,плюс шаг.
EMAX.F В качестве начального значения принимается
максимальное значение колонки в существующих таб-
лицах плюс шаг.
Eincrement.F Шаг возрастания.По умолчанию равен 1.
Если строка отброшена (например,из-за ошибки фор-
мата или ошибки ORACLE),то значение,генерируемое
функцией SEQUENCE,не корректируется.Так,если
колонка в четырех последовательных строках должна
получить значения 10,12,14 и 16,а вторая запись
отбрасывается,то 3 строки,вставленные в табли-
цу,будут иметь значения 10,14 и 16,а не 10,12
и 14.Это позволяет сохранить последовательность
вставок,несмотря на ошибки данных.Если вы отме-
тите отброшенные записи и повторно загрузите их,
вы можете вручную установить значения колонок в
соответствии с требуемой последовательностью.
EУказание F Чтобы загрузить данные из файла данных,SQL*Loader
Eпозиции F должен знать,где размещено поле и какова его дли-
Eполя данныхF на.Чтобы указать позицию поля в логической запи-
си,используйте предложение POSITION в определении
колонки.Позиция м.б. указана явно или отно-
сительно предыдущего поля.Аргументы POSITION д.б. заключены
в круглые скобки.
POSITION ( { start [ :end ] | * | [ +n ] } )
Estart.F Указывает начальную позицию поля данных
в логической записи.Позиции логической записи
нумеруются с 1.
Eend.F Указывает конечную позицию поля данных
в логической записи.
Допускается использовать двоеточие или дефис
(start:end или start-end).
Если вы опустите end,длина поля определяется по
типу данных в файле данных (см.разделы для каж-
дого типа данных; заметим,что если данные CHAR
указаны без start и end,то длина поля считается
равной 1).Если невозможно определить длину поля
по типу данных,выдается сообщение об ошибке.
E*.F Указывает,что поле данных следует непосредс-
твенно за предудущим полем.Если * используется
для первого поля данных,то считается,что оно
начинается с начала логической записи.Если * ис-
пользуется без start и end,длина поля определяет-
ся по типу данных.
E+n.F Смещение,указанное как +n,м.б. исполь-
зовано с *,чтобы определить положение поля отно-
сительно предыдущего.n символов будет пропущено
перед чтением значения для этого поля.
Предложение POSITION м.б. полностью опущено.
В этом случае для спецификации поля используется
значение POSITION(*).
Если при загрузке нескольких таблиц вы указываете
POSITION(*) для первой колонки первой таблицы,то
позиция определяется с начала логической записи.
Если вы указываете POSITION(*) для первой колонки
следующих таблиц,позиция определяется относитель-
но последней колонки предыдущей таблицы.
Поэтому позиции во втором и следующих блоках INTO
TABLE не установлены с начала логической записи,
если вы не потребуете этого явно.Выход простой:
вместо POSITION(*) или POSITION(*+n) для первого
поля следующего блока INTO TABLE используйте
POSITION(1) или POSITION(n).Это позволяет загру-
жать несколько таблиц,когда данные для каждой
таблицы находятся в одной и той же логической за-
писи.Для каждой следующей таблицы можно либо про-
должить обработку логической записи,либо начать
сначала.
Несколько примеров:
SITEID POSITION (*) SMALLINT
SITELOC POSITION (*) INTEGER
Если это спецификация первых2колонок,SITEID
будет начинаться в позиции 1,а SITELOC - сразу за
ним.
ENAME POSITION (1:20) CHAR
EMPNO POSITION (22-26) INTEGER EXTERNAL
ALLOW POSITION (*+2) INTEGER EXTERNAL TERMINATED BY "/"
Колонка ENAME - это символьное данное в позициях
1-20,далее следует колонка EMPNO,вероятно
числовое данное,в позициях 22-26.Колонка ALLOW
сдвинута относительно EMPNO на +2,то есть начина-
ется с позиции 28 и продолжается до символа "/".
EУказание F Длина полей м.б. указана несколькими спосо-
Eдлины данныхF бами.Иногда м.б. использованы 2 указания,
из которых одно имеет преимущество.Следующие пра-
вила описывают,как определяется длина поля:
* Длина,определяемая по типу данных,отвергает
длину,указанную в POSITION (start:end) или дли-
ну поля до разделителя.
* Длина,указанная в POSITION (start:end),отвер-
гает длину поля до разделителя.
* Длина поля до разделителя отвергает длину из
POSITION,если POSITION указывает только началь-
ную позицию.
* Для данных CHARACTER,указанных только с start
(без длины и без ENCLOSED BY),предполагается
длина 1.
EУказаниеF После указания позиции поля данных во входной за-
Eтипа F писи вы должны указать тип данных для этого поля.
Eвходных F Этот тип данных относится к данным в файле и не-
Eданных F обязательно совпадает с типом данных колонки в
таблице ORACLE,так как ORACLE автоматически вы-
полнит преобразование.Однако вы отвечаете за то,
чтобы подобное преобразование имело смысл и не
приводило к ошибкам.В частности,при преобразова-
нии от символьного к числовому вы д.б. уве-
рены,что символьная строка представляет правиль-
ное числовое значение.Для каждого поля можно ука-
зать только один тип данных.Если тип данных не
указан,предполагается CHAR.
EТип данныхF Поле содержит символьные данные.Если длина поля
ECHAR F не указана,она берется из POSITION,если указана
- отвергает длину из POSITION.Если таким образом
длина нигде не найдена,используется длина 1.
CHAR [ ( length ) ] [ delimiter_spec ]
Поле с типом данных CHAR может иметь также пере-
менную длину или представляться с разделителями
или ограничителями.См."Определение символьных
данных с ограничителями".
Если колонка таблицы БД объявлена как
LONG,вы должны явно указать максимальное значение
длины либо в ключевом слове LENGTH,либо в пред-
ложении POSITION.Это обеспечит достаточную длину
буфера,размещенного для чтения данных,и необхо-
димо даже в случае данных с ограничителями.
EТип данныхF Поле содержит символьные данные,которые должны
EDATE F быть преобразованы к дате с использованием ука-
занной маски ORACLE.Например:
LOAD DATA
INTO TABLE DATES (COL_A POSITION (1:15) DATE 'DD-Mon-YYYY')
BEGINDATA
01-Jan-1066
01-Apr-1534
28-Feb-2004
Если длина не указана,она берется из POSITION,
если указана - отвергает длину из POSITION.В ка-
честве маски используется любая допустимая маска
ORACLE для даты.Если маска опущена,по умолчанию
используется маска "DD-Mon-YY".Длина д.б.
заключена в круглые скобки,а маска - в кавычки.
DATE [ ( length ) ] [ datemask ] [ delimiter_spec ]
Поле с типом данных DATE может иметь также пере-
менную длину или представляться с разделителями
или ограничителями.См."Определение символьных
данных с ограничителями".
EТип данныхF Поле содержит символьную строку переменной длины,
EVARCHAR F которая в первых2байтах содержит поле длины.
Поле длины должно начинаться с позиции start пред-
ложения POSITION.Длина включает первые 2 байта.
Если вы используете POSITION(start:end),то end
игнорируется.
VARCHAR [ ( length ) ]
Если вы указываете длину после VARCHAR,эта длина
используется как максимальное значение и служит
для размещения буферов.Если длина не указана,вы-
деляется буфер длиной 2К байтов.
EТип данныхF Поле содержит 2-ное целое данное в формате
ESMALLINT F полуслова.Если вы указываете start:end в предло-
жении POSITION,end игнорируется.Длина поля опре-
деляется длиной полуслова в вашей системе.(Тип
данных SHORT INT в Си).
SMALLINT
EТип данныхF Поле содержит 2-ное целое данное в формате пол-
EINTEGER F ного слова.Если вы указываете start:end в предло-
жении POSITION,end игнорируется.Длина поля опре-
деляется длиной полного слова в вашей системе.
(Тип данных LONG INT в Си).
INTEGER
EТип данныхF Поле содержит 2-ное плавающее данное простой
EFLOAT F точности.Если вы указываете end в предложении
POSITION,end игнорируется.Длина поля определя-
ется длиной плавающего простой точности в вашей
системе.(Тип данных FLOAT в Си).
FLOAT
EТип данныхF Поле содержит 2-ное плавающее данное двойной
EDOUBLE F точности.Если вы указываете end в предложении
POSITION,end игнорируется.Длина поля определя-
ется длиной плавающего двойной точности в вашей
системе.(Тип данных DOUBLE или LONG FLOAT в Си).
DOUBLE
EТип данныхF Поле содержит данное,представленное в упакованном
EDECIMAL F 10-м формате (строка 10-х цифр,каждая
из которых представлена 4 битами; знак
представлен 4-я крайними правыми битами).
Формат DECIMAL требует указать,сколько цифр со-
держится в числе.Это позволяет вычислить длину
упакованного 10-го поля в байтах.Можно так-
же указать точность или масштабный множитель для
определения количества цифр в дробной части.
DECIMAL ( digits [ ,precision ] )
Edigits.F Количество цифр в числе для определения
длины.Длина поля вычисляется как целая часть зна-
чения (digits+2)/2.
Eprecision.F Масштабный множитель,количество цифр в
дробной части.По умолчанию ноль (для представле-
ния целого данного).Может быть больше,чем коли-
чество цифр,но отрицательное значение не допуска-
ется.
EТип данныхF Поле содержит число во внешнем формате ( т.е.сим-
Eчисловой F вольное,а не 2-ное представление).Таким обра-
EEXTERNAL F зом,этот тип идентичен CHAR (см.выше) с одним
исключением: использование DEFAULTIF.Если вы хо-
тите установить по умолчанию пустое поле,исполь-
зуйте CHAR,а если вы хотите установить ноль,ис-
пользуйте EXTERNAL.Числовое EXTERNAL м.б.
описано с длиной и ограничителем,так же,как
CHAR.Длина необязательна,но если она указана,то
отвергает значение длины из POSITION.
INTEGER EXTERNAL [ ( length )] [ delimiter_spec ]
DECIMAL EXTERNAL [ ( length )] [ delimiter_spec ]
FLOAT EXTERNAL [ ( length )] [ delimiter_spec ]
EТип данныхF Поле представлено в виде строки двухбайтных симво-
EGRAPHIC F лов (DBCS).ORACLE не поддерживает DBCS,однако
SQL*Loader будет считывать DBCS как обычную сим-
вольную строку и запоминать без изменения в ука-
занной колонке.Единственное отличие касается дли-
ны.Если вы используете POSITION (start:end),оно
определяет действительное положение поля в логи-
ческой записи.Однако,если вы указываете длину
после ключевого слова GRAPHIC,оно определяет дли-
ну в символах DBCS,поэтому фактическая длина поля
в байтах будет в 2 раза больше.
Если поле DBCS окружено ограничителями,используй-
те тип данных GRAPHIC EXTERNAL.Он отличается от
GRAPHIC только тем,что первый и последний символы
(ограничители) не загружаются.
GRAPHIC EXTERNAL [ ( length ) ]
EGRAPHIC.F Данные представлены в виде 2-байтных
символов.
EEXTERNAL.F Игнорируются первый и последний символы.
Elength.F Длина поля в 2-байтных символах.
Этот сложный механизм лучше всего обьяснить на
примере:
Пусть [] - ограничители,а # - любой 2-байтный
символ
Чтобы описать ####,используйте "POSITION (1:8)
GRAPHIC" или "POSITION (1) GRAPHIC (4)".
Чтобы описать [####],используйте "POSITION (1:10)
GRAPHIC EXTERNAL" или "POSITION (1) GRAPHIC
EXTERNAL (4)".
EТип данныхF Поле представлено в виде строки 2-байтных симво-
EVARGRAPHICF лов переменной длины.Длина задана в первых 2
байтах и представляет количество символов DBCS.
Удвоенная длина определяет количество читаемых
байтов.Можно оптимизировать размещение буферов,
указав после ключевого слова VARGRAPHIC длину.В
противном случае выделяется буфер длиной 4К байтов.
VARGRAPHIC [ ( length ) ]
EОпределение F Поля типов данных CHAR,DATE или числовой EXTERNAL
Eсимвольных F могут представляться с разделителями и ограничите-
Eданных с F лями,в качестве которых используются определенные
EограничителямиF символы.Вы указываете эту возможность после опре-
деления типа данных.Используются 2 ключевых
слова - TERMINATED (с разделителем) и ENCLOSED
(c ограничителями).
Данное с разделителем читается с начальной позиции
поля ( которое может следовать непосредственно за
предыдущим полем) до тех пор,пока не встретится
символ-разделитель.Сам разделитель не включается
в значение поля.Если указано WHITESPACE,данное
читается до тех пор,пока не встретится символ
whitespace (пробел,табуляция,новая строка).За-
тем следующие соседние символы whitespace пропус-
каются без обработки.Это позволяет разделять от-
дельные поля группами символов whitespace.
Данное с ограничителями начинает считываться после
первого появления ограничивающего символа и про-
должается до второго появления.Если два ограничи-
вающих символа следуют непосредственно друг за
другом в считываемом данном,то единственный сим-
вол-ограничитель включается в значение данных.На-
пример,'DON''T' запоминается как DON'T.Однако,
если поле содержит только 2 символа-ограничите-
ля,то его значение будет пустым.
[ TERMINATED [ BY ] { WHITESPACE | [X] 'char' } ]
[ [ OPTIONALLY ] ENCLOSED [ BY ] [X] 'char' ]
Можно указать предложение TERMINATED BY,предложе-
ние ENCLOSED BY или оба.В последнем случае поря-
док ключевых слов должен быть таким,как указан.
ETERMINATED.F Читает данное до первого появления
разделителя.
EOPTIONALLY.F Данные м.б. ограничены указан-
ными символами.Если SQL*Loader обнаруживает пер-
вое появление символа,он читает данные до второ-
го появления.В этом случае предложение TERMINATED
BY д.б. указано либо локально,либо гло-
бально в операторе FIELDS.
EENCLOSED.F Находит значение данного между двумя ог-
раничителями.
EBY.F Необязательное ключевое слово.
EWHITESPACE.F Разделителем считается любой символ
whitespace,включая прогон строки,прогон формы,
возврат каретки и т.п.(только для TERMINATED).
Echar.F Односимвольный разделитель или ограничитель.
EX'hex-byte'.F Односимвольный разделитель или огра-
ничитель в 16-ом формате со значением
ASCII.
Использование разделителей и ограничителей - это
единственный способ загрузить данные с хвостовыми
пробелами.
Если поле данных имеет длину 8 символов и содержит
значение DANIELbbb,где bbb - 3 пробела,то оно
будет загружено в ORACLE как "DANIEL",если объяв-
лено CHAR (8).Однако,если вы желаете сохранить
хвостовые пробелы,вы можете объявить его как
CHAR (8) TERMINATED BY ':' и добавить двоеточие в
файл данных,то есть представить поле в виде
DANIELbbb:.Теперь оно будет загружено в ORACLE
как "DANIELbbb" с сохранением пробелов.
EОпределениеF Если вы хотите,чтобы все вставленные значения для
Eпустых F некоторой колонки были пустыми,опустите целиком
Eколонок F описание колонки.Либо вы можете установить пустое
значение для колонки в зависимости от некоторого
условия,сформулированного для логической записи.
Используйте ключевое слово NULLIF после типа дан-
ных и спецификации ограничителей,указав после не-
го условие таким же образом,как и в предложении
WHEN.Значение колонки будет установлено пустым,
если условие выполняется; в противном случае зна-
чение не будет изменяться.
NULLIF field_condition
Заметим,что условие м.б. рефлексивным,как
в следующем случае:
COLUMN1 POSITION (11:17) CHAR NULLIF (COLUMN1 = "unknown")
Здесь значение для колонки сначала определяется из
файла данных,а затем м.б. установлено пус-
тым перед записью в таблицу.Это м.б. полез-
ным,если вы желаете вместо некоторых значений
данных установить пустое значение.
EУстановкаF Если вы желаете присвоить числовым колонкам ноль,
Eчисловых F а не пустое значение,используйте предложение
Eколонок F DEFAULTIF вместо предложения NULLIF.Если колонка
Eв ноль F символьная,а не числовая,для нее удобно исполь-
зовать пустое значение,а не 0.Колонка м.б. одновременно с
NULLIF и DEFAULTIF,хотя это
в большинстве случаев излишне.
DEFAULTIF field_condition
Заметим,что использование DEFAULTIF в данных
числовой EXTERNAL дает значение 0ь,в данных
CHAR дает пустое значение.
См."Указание условия для поля" для более подроб-
ной информации.
E Указание начала данных в управляющем файле F
Если ваши данные находятся в том же файле,что и
предложение LOAD DATA,вы должны поместить ключе-
вое слово BEGINDATA перед самой первой записью
данных,чтобы указать,что управляющая информация
закончилась и должна начинаться загрузка.
BEGINDATA
Если вы опустите это ключевое слово,SQL*Loader
попытается интерпретировать ваши данные как управ-
ляющую информацию,и вы получите сообщение об
ошибке.Если данные находятся в отдельном файле,
достижение конца управляющего файла указывает,что
управляющая информация закончилась,и ключевое
слово BEGINDATA не нужно.
+ E ПРИЛОЖЕНИЕ А
ПРЕДУПРЕЖДЕНИЯ И СООБЩЕНИЯ ОБ ОШИБКАХ SQL*LOADER F
Сообщения об ошибках SQL*Loader имеют форму:
SQL*Loader-nnn: message
где nnn - код ошибки и message - текст сообщения
об ошибке.Ниже приведены коды и сообщения об
ошибках.
E Коды 100-199: Ошибки командной строки F
100 Syntax error on command line
Синтаксическая ошибка в командной строке.
Возможная причина - позиционные аргументы следуют
после ключевых,неопределенные ключевые слова,не
сбалансированы скобки или кавычки или символ
whitespace между ключевым словом,'=' и аргументом.
101 Invalid argument for username/password
Неверный аргумент для пользователя/пароля.
102 Invalid control file name on command line
Неверное имя управляющего файла в командной строке.
103 Invalid log file name on command line
Неверное имя файла отчета в командной строке.
104 Invalid bad file name on command line
Неверное имя файла отброшенных записей в командной
строке.
105 Invalid data file name on command line
Неверное имя файла данных в командной строке.
106 Invalid discard file name on command line
Неверное имя файла пропущенных записей в командной
строке.
107 Invalid maximum number of discards
Неверное максимальное число пропущенных записей.
108 Invalid number of logical records to load
Неверное число загружаемых логических записей
109 Invalid number of logical records to skip
Неверное число логических записей,которые нужно
пропустить до обработки.
110 Invalid maximum number of errors
Неверное максимальное число ошибок.
111 Invalid number of rows for bind array
Неверное число строк в связанном массиве.
112 Invalid maximum bind array size
Неверный максимальный размер связанного массива.
113 Invalid silent mode option Неверная опция для SILENT.
114 Error in OPTIONS statement Ошибка в операторе OPTIONS.
E Коды 200-299: DB2,синтаксические ошибки и информационные сообщения F
200 FORMAT clause should not be present - flat data
files only SQL/DS format not supported here
Предложение FORMAT не должно использоваться.
ЗАМЕЧАНИЕ: 250-299 - информационные сообщения,а не
сообщения об ошибках.
250 Work data sets are not used by SQL*Loader
Рабочие наборы данных SQL*Loader не использует.
251 Sort devices are not used by SQL*Loader
Устройства сортировки SQL*Loader не использует.
252 Sort data sets are not used by SQL*Loader
Наборы данных сортировки SQL*Loader не использует.
253 DB2 partition number has no significance -- ignored
Номер раздела DB2 не имеет значения -- игнорируется.
E Коды 300-399: Синтаксические ошибки в управляющем файле F
300 Control file line too long
Строка управляющего файла слишком длинна.
301 Token too long Управляющая информация слишком длинна.
302 Non-terminated quoted string constant found
В символьной строке отсутствует правая кавычка.
350 Syntax error at line n. Синтаксическая ошибка в строке n.
n - строка в управляющем файле,в которой обнаружена
ошибка.За синтаксической ошибкой следует строка вида:
Expecting x,found y
где х - часть управляющей информации,которую ожидал
SQL*Loader,а y - обнаруженная информация.Далее пе-
чатается ошибочная строка управляющего файла,в кото-
рой символом "^" или "*" отмечена ошибка.Например:
SQL*Loader-350: Syntax error at line 28
Expecting column name,found keyword CHAR.
col3 ENCLOSED BY '"',CHAR ENCLOSED "'",
^
E Коды 400-499: Логические ошибки (синтаксис верный) F
400 Record format only for data and control in same file
Если данные в управляющем файле,то допускается толь-
ко формат RECORD.
401 End field position must be greater then or equal to start
Конечная позиция поля д.б. больше либо равна начальной.
402 Unable to determine length from column specification
Невозможно определить длину из определения колонки.
403 Referenced column x not present in table y
Колонки x нет в таблице y.
404 Column x present more than once in table y
Колонка x встречается более одного раза в таблице y.
Где х и y - это имена колонки и таблицы из управляющего файла.
E Коды 500-599: Ошибки при открытии и чтении файлов F
500 Unable to open control file (name)
Невозможно открыть управляющий файл (имя).
501 Unable to read control file (name)
Невозможно читать управляющий файл (имя).
502 Unable to open log file for write (name)
Невозможно открыть файл отчета для записи (имя).
503 Unable to open data file (name)
Невозможно открыть файл данных (имя).
504 Unable to read data file (name)
Невозможно читать файл данных (имя).
505 Actual physical record length greater than specified maximum
Вы указали максимальную длину записи для типа
VARIABLE,однако обнаружена запись с большей длиной.
506 Unable to open bad file (name)
Невозможно открыть файл отброшенных записей (имя).
507 Unable to open discard file (name)
Невозможно открыть файл пропущенных записей (имя).
Указано имя файла,для которого возникла ошибка.
E Коды 600-699: Ошибки,возникшие при загрузке F
600 Specified maximum bind size too small for a single row
Превышен размер памяти,выделенной для связанного
массива при помощи ключевого слова BINDSIZE в команд-
ной строке или оператора OPTIONS в управляющем файле.
601 For INSERT option,table must be empty.Error on x
Для опции INSERT таблица д.б. пустой.Ошибка
в таблице x.
Если вы хотите заменить данные в таблице,используйте
ключевое слово REPLACE.Если вы хотите добавить дан-
ные в таблицу,используйте ключевое слово APPEND.
См.синтаксис INSERT | APPEND | REPLACE для более
подробной информации.
602 Maximum error count exceeded Превышено максимальное число ошибок.
E Коды 620-639: Ошибки формата F
Это ошибки в данных,которые описаны операторами
свободного формата (TERMINATED,ENCLOSED) в управляю-
щем файле.Ошибки формата возникают,когда данные не
соответствуют спецификации формата,т.е.делается по-
пытка загрузить неверные данные в БД.Ошибки
формата приводят к тому,что записи помещаются в файл
отброшенных записей,так как не м.б. загружены.
620 Initial enclosing character not found
Символ-ограничитель не найден.
621 Field in data file exceeds maximum specified length
Длина поля в файле данных превышает указанный
максимум.
622 Logical record ended - no terminator character found
Логическая запись закончилась - символ-терминатор
не найден.
623 Logical record ended - second enclosing character
not present
Логическая запись закончилась -- второй символ-огра-
ничитель отсутствует.
624 No terminator found after TERMINATED and ENCLOSED field
Не найден символ-терминатор после поля с описанием
TERMINATED и ENCLOSED.
E Коды 640-699: Неисправимые ошибки ORACLE F
Это ошибки,которые возникают при обращении к БД
и делают невозможным продолжение выполнения
SQL*Loader.Например,неправильное подключение к сис-
теме,неправильные имена таблиц или колонок.Когда
возникает такая ошибка,печатается код ошибки и сооб-
щение,указывающее тип операции с БД.Печа-
тается также имя таблицы и колонки,если эта информа-
ция доступна.
640 Non-recoverable ORACLE error occured
Неисправимая ошибка ORACLE.
641 Error occured on SQL insert statement for table x
Your use of column y is possibly in error
Ошибка в операторе insert SQL для таблицы x.
Возможно,вы неправильно используете колонку y.
642 Error occured while verifying emptiness of table x
Ошибка при проверке,является ли таблица x пустой.
643 Error occured while trying to delete from table x
Ошибка при попытке удалить строки из таблицы x.
Когда вы используете ключевое слово REPLACE,все
строки д.б. удалены перед загрузкой.Поэтому
вы должны иметь привилегии DELETE для таблицы.
644 Error occured on an attempt to commit
Ошибка при попытке выполнить commit.
645 Error occured while querying the count in table x
Ошибка при поиске числа строк в таблице x.
646 Error occured while querying maximum of x.y
Ошибка при поиске максимального значения x.y
где х и y - имена таблицы и колонки.
E Коды 700-799: Фатальные ошибки F
700 Out of memory while performing essential allocations
Недостаточно оперативной памяти для основного размещения.
701 Out of memory while allocating bing array
Недостаточно оперативной памяти для размещения свя-
занного массива.
702 Internal error - call customer support...
Внутренняя ошибка - обратитесь к администратору.
+ E ПРИЛОЖЕНИЕ B
ЗАМЕЧАНИЯ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ
УТИЛИТЫ ЗАГРУЗКИ БАЗЫ ДАННЫХ DB2 И DXT F
EДополнительные возможности SQL*Loader по сравнению с утилитой загрузки DB2F
SQL*Loader может использовать любой управляющий
файл утилиты загрузки DB2,а также обеспечивает
дополнительные возможности,поддерживая:
* тип данных DATE
* автоматическое формирование уникальных последо-
вательных ключей
* возможность явного указания длины записи
* загрузку данных из нескольких файлов различного
типа
* фиксированный формат,свободный формат и записи
переменной длины
* возможность разделять одну физическую запись на
несколько логических
* возможность формировать одну логическую запись
из нескольких физических при помощи CONCATENATE,
CONTINUEIF NEXT,CONTINUEIF THIS (IBM поддержи-
вает только CONTINUEIF THIS)
* более полную диагностику ошибок
* файл отброшенных записей (DB2 прекращает выпол-
нение при первой ошибке)
* управление числом загружаемых записей,записей
пропущенных до обработки,а также числом допус-
тимых ошибок
* несколько условий предложения WHEN
* предложение FIELDS для определения характеристик
поля по умолчанию.
E Использование опции RESUME из DB2 F
Вы можете использовать синтаксис DB2 для RESUME,
однако возможно вы предпочтете использовать экви-
валентное ключевое слово SQL*Loader.См."Переза-
пись или добавление записей в существующую табли-
цу" для детальной информации об опциях SQL*Loader,
приведенных ниже:
Опции DB2 Опции SQL*Loader Результат
RESUME NO или INSERT Данные загружаются толь-
без RESUME ко в том случае,если
таблица пуста,иначе
возвращается ошибка.
RESUME YES APPEND Новые данные добавляются
к существующим данным в
таблице.
RESUME NO REPLACE Новые данные полностью
REPLACE замещают существующие
данные в таблице.
Ниже следует описание синтаксиса DB2.
Если загружаемая таблица уже содержит данные,вы
имеете 3 возможности для загрузки данных.Укажи-
те свой выбор,используя предложение RESUME.Аргу-
мент RESUME м.б. заключен в круглые скобки.
RESUME { YES | NO [ REPLACE ] }
EYES.F Добавляет новые строки таблицы к существую-
щим.
ENO.F Требует,чтобы таблица была пустой перед заг-
рузкой.Если таблица содержит строки,выдается со-
общение об ошибке и выполнение прекращается (эта
возможность используется по умолчанию).
ENO REPLACE.F Удаляет все данные в таблице перед
загрузкой новых данных,т.е.старые данные будут
заменены новыми.Этот аргумент требует,чтобы
пользователь,вызывающий SQL*Loader,имел полномо-
чия DELETE для таблицы.Вы не можете восстановить
данные,которые содержались в таблице до загрузки,
если только они не были сохранены утилитой EXPORT
или каким-нибудь другим способом.
В SQL*Loader вы можете использовать одно предложе-
ние RESUME для всех загружаемых таблиц,помещая
его перед всеми предложениями INTO TABLE.Либо вы
можете указать опцию для отдельной таблицы,поме-
щая ее после требуемого предложения INTO TABLE.
В первом случае опция действует для всех таблиц,
не имеющих своих собственных опций.
E Обеспечение совместимости F
Утилита загрузки DB2 корпорации IBM содержит неко-
торые элементы,отсутствующие в SQL*Loader.Напри-
мер,DB2 сортирует индексы с использованием
внешних файлов и определение этих файлов может
быть включено в операторы загрузки.Для совмести-
мости с загрузчиком DB2 SQL*Loader обрабатывает
эти опции,но игнорирует их,если они бессмысленны
с точки зрения ORACLE.Следующие синтаксические
элементы допускаются,но игнорируются SQL*Loader.
EОператор LOGF Этот оператор включен для совместимости с DB2.Он
обрабатывается,но игнорируется SQL*Loader.(Эта
опция не оказывает никакого действия на файл отче-
та,создаваемый SQL*Loader).DB2 использует файл
отчета для восстановления после ошибок и может
создавать либо не создавать его.
SQL*Loader использует в этих случаях журнал защиты
ORACLE,который может создаваться либо не созда-
ваться как опция для теплого старта.
[ LOG { YES | NO } ]
EОператорF Этот оператор включен для совместимости с DB2.Он
EWORKDDN F обрабатывается,но игнорируется SQL*Loader.В DB2
этот оператор объявлял временный файл для сорти-
ровки.
[ WORKDDN filename ]
EОператоры F Операторы SORTDEVT и SORTNUM включены для совмес-
ESORTDEVT иF тимости с DB2.В DB2 эти операторы указывали чис-
ESORTNUM F ло и тип временных файлов для сортировки.
[ SORTDEVT device_type ]
[ SORTNUM n ]
EСпецификацияF Обработка нескольких файлов требует,чтобы предло-
EDISCARD F жение DISCARD размещалось в различных местах уп-
равляющего файла (после определения каждого файла
данных).Однако при загрузке единственного совмес-
тимого с DB2 файла эти предложения должны нахо-
диться на их старых позициях: между предложениями
RESUME и RECLEN.Заметим,что нуль (0) в опции
DISCARD утилиты загрузки DB2 означает неограничен-
ное число пропущенных записей,в то время как нуль
(0) для SQL*Loader означает остановить обработку
на первой пропускаемой записи.
E Ограничения F
Некоторые возможности загрузчика DB2 недопустимы
для SQL*Loader.Например,SQL*Loader не загружает
данные ни из SQL/DS файлов,ни из DB2 UNLOAD фай-
лов.SQL*Loader возвращает ошибку при обнаружении
следующих команд утилиты загрузки DB2.
EОператорF Оператор FORMAT из DB2 не должен находиться в упра-
EFORMAT F вляющем файле,который используется SQL*Loader.
Загрузчик DB2 загружает файлы формата SQL/DS и DB2
UNLOAD так же,как и файлы формата утилиты загруз-
ки DB2.SQL*Loader не поддерживает эти форматы.
Если эта опция встретится в управляющем файле,
SQL*Loader завершится с ошибкой (IBM не описывает
формат этих файлов,поэтому SQL*Loader не может
распознать его).
FORMAT { UNLOAD | SQL/DS }
EОператорF Оператор PART включен для совместимости с DB2.
EPART F В ORACLE нет понятия,сответствующего понятию раз-
деленной таблицы DB2.В SQL*Loader таблица читает-
ся целиком; выдается предупреждение,указывающее,
что разделенные таблицы не поддерживаются,и затем
загружается вся таблица.
[ PART n ]
EОпция F Элемент SQL/DS='tablename' не должен использовать-
ESQL/DSF ся в предложении WHEN.SQL*Loader не поддерживает
внутренний формат SQL/DS,поэтому опция SQL/DS в
этом предложении приведет к ошибке и завершению
SQL*Loader.
EГрафическиеF Так как ORACLE не поддерживает строки двухбайтных
Eстроки DBCSF символов (DBCS),графические строки формата G'**'
не допускаются.
+ E ПРИЛОЖЕНИЕ С
ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА SQL*LOADER F
Следующие зарезервированные слова SQL*Loader д.б. заключены
в кавычки,если вы желаете ис-
пользовать их как имена таблиц или колонок при вы-
полнении SQL*Loader.
AND EXTERNAL RECLEN
APPEND FIELDS RECNUM
BADDN FIXED RECORD
BADFILE FLOAT REPLACE
BEGINDATA FORMAT RESUME
BLOCKSIZE GRAPHIC SEQUENCE
BY INDDN SMALLINT
CHAR INFILE SORTDEVT
CONCATENATE INSERT SORTNUM
CONSTANT INTEGER SQL/DS
CONTINUEIF INTO STREAM
COUNT LAST TABLE
DATA LOAD TERMINATED
DATE LOG THIS
DECIMAL MAX UNLOAD
DEFAULTIF NEXT VARCHAR
DISCARDDN NO VARGRAPHIC
DISCARDFILE NULLIF VARIABLE
DISCARDMAX OPTIONALLY WHEN
DISCARDS OPTIONS WHITESPACE
DOUBLE PART WORKDDN
ENCLOSED POSITION YES
E ИНДЕКС F
E А F
Аргументы командной строки
ключевые 44
позиционные 44
по умолчанию 43
BAD 43,45
BINDSIZE 43,47
CONTROL 43,45
DATA 43,45
DISCARD 43,46
DISCARDMAX 43,46
ERRORS 43,46
LOAD 43,46
LOG 43,45
ROWS 43,47
SILENT 43,47,53
SKIP 43,46,53,67
USERID 43,45
E Б F
База данных
демонстрационная 20
определение 45
откат 17
пароль 45
подготовка к загрузке 14
подключение OPS$ 45
удаленная 45
Буфер 55,60
размер 47,60,72,74
E В F
Входная информация SQL*Loader 12
Выходная информация DXT 11
Выходная информация SQL*Loader 15,49
E Д F
Данные 13
в управляющем файле 21,76
2-ые фиксированные в формате полуслова 72
2-ые фиксированные в формате слова 72
2-ые плавающие двойной точности 72
2-ые плавающие простой точности 72
10-е упакованные 72
длина 70
по умолчанию 70,71
нулевые 26,67,73,75
преобразование 70
символьные 13,74
смещение 69
с ограничителями 13,54,71,74
с разделителем 13,54,71,74
точность 72
Дистрибутивный носитель 7,20
Длина
записи переменная 55
байты 74
поле 71
E З F
Загрузка
даты 28,71
нескольких таблиц за один прогон 20,36
отрицательных значений 33
по условию 18,65
с замещением данных 59,84
с ленты 11,55
с опцией RESUME 84
Записи
выбор для загрузки 65
длинные 60
логические 14
отброшенные 17,56
критерий 17
максимальное количество 46
разрешение загрузки всех 46
переменной длины 13
пропущенные 18,46,57
критерий 18,57
максимальное количество 46,59
прекращение обработки на первой 59
разрешение загрузки всех 59
пропущенные до обработки 46
физические 14
соединение 32,61,63
фиксированной длины 13
Зарезервированные слова SQL*Loader 88
E И F
Имя пользователя ORACLE 45
Индекс 14,85
уникальный 32
E К F
Кластеры 14
Ключевое слово
BADDN 57
BADFILE 57
BEGINDATA 52,76
BLOCKSIZE 54
CONCATENATE 61
CONSTANT 52,66,67
CONTINUEIF 52,61
примеры использования 63,64
COUNT 68
DISCARDDN 58
DISCARDFILE 58
ENCLOSED 52,54,66,74
FIELDS 66
FIXED 52,54
INDDN 52,54
INFILE 52,54
MAX 68
OPTIONS 68
RECLEN 60,86
RECNUM 66,67
RECORD 55
STREAM 54
TERMINATED 52,54,66,70
VARIABLE 52,54
WHITESPACE 52,54,66,74,75
Колонка таблицы 24
имя 66
непустое значение (NOT NULL) 33
уникальное значение 28
формирование 11,68
установка в нуль 75
Команда SQLLOAD 43
ввод аргументов 44
вывод опций 43
параметры по умолчанию 43
Комментарии
в управляющем файле 28,29,51
в файле данных 51
Константа 67
E М F
Маска даты 71
Массив связанный (bind array) 43
размер 43,47
Масштабный множитель 72
E О F
Оператор
сравнения 53,62,66
FORMAT 86
PART 87
SORTDEVT 86
SORTNUM 86
WORKDDN 85
Операция commit 49
Опция
APPEND 59,84
DISCARDS 47
INSERT 59,84
REPLACE 60,84
RESUME 84
SILENT 43,47
ключевые слова 47
SQL/DS 87
Ошибки 49,77
в данных 46
восстановление 85
порядка 40
сообщения 11,77
ORACLE 17,49,82
E П F
Поле
длина 62,70
начальная позиция 53,62,65,69
продолжения 62
в последней непустой позиции 62
пустое 25,75
сравнения 65
условие 53,65
Полномочия
DELETE 60,84
INSERT 14,64
Предложение
DEFAULTIF 65,75
INTO TABLE 64
LOAD DATA 52
NULLIF 18,65,75
POSITION 69,71,73
опустить 69
переустановить на текущую запись 69
WHEN 18,65
Представление пользователя (view) 14
Пробелы 75
загрузка 75
хвостовые 75
Пустое знач 18,67
E Р F
Расширение имени файла
BAD 45,56
CTL 45
DAT 45
DSC 18,46,58
LOG 45
E С F
Символ
новая строка 13
ограничитель 13,66,74
продолжения 15
разделитель 13
DBCS 73,87
whitespace 74,75
Сообщения SQL*Loader 49
Сортировка в DB2 при загрузке 86
E Т F
Таблицы
демонстрационной БД 20
DEPT 20
EMP 20
загрузка другим пользователем 64
значение ключа 11
формирование 30,68
колонки 24
разделенные в DB2 87
Тип данных
СHAR 71
cвободный формат 71
DATE 71
cвободный формат 71
DECIMAL 72
DOUBLE 72
EXTERNAL 73
c разделителем 73
числовой 73
FLOAT 72
GRAPHIC 73
INTEGER 72
SMALLINT 72
VARCHAR 71
VARGRAPHIC 74
E У F
Установка SQL*Loader 12
Утилита загрузки
DB2 (DB2 Load Utility) 11,12
ODL (ORACLE Data Loader) 11
E Ф F
Файл
данных (data file) 13,54
имя 54
несколько 55
режим чтения 54
отброшенных записей (bad file) 11,17,56
отчета 11,15
пропущенных записей (discard file) 11,18,57
имя по умолчанию 18,46,58
критерий 18
создание 57
управляющий (control file) 12
подавление печати заголовка 47
содержащий данные для загрузки 20,54
указание аргументов 53
CASE1.CTL 7,20,21
CASE2.CTL 7,20,24
CASE2.DAT 7,20,24
CASE3.CTL 7,20,28
CASE4.CTL 7,20,32
CASE4.DAT 7,20,32
CASE5.CTL 7,20,36
CASE5.DAT 7,20,36
Фильтрация записей при загрузке 11
Формат данных
внешний 13,70
2-й 13
переменный 13
символьный 13
фиксированный 13
Формирование
логической записи из физических 14,61,63
уникального последовательного номера 11,68
Функция
SEQUENCE 30,66,68
начальное значение 68
шаг изменения 68
E S F
SQL*Loader
возможности 11
SQL*NET 45
SQL/DS (формат файла DB2) 86,87
E U F
UNLOAD (формат файла DB2) 86
|
|