Программирование >>  Oracle 

1 ... 139 140 141 [ 142 ] 143 144 145 ... 469


Глава 9

загрузить. Управляющий файл может содержать даже данные, которые необходимо загрузить. В следующем примере создается простой управляющий файл и описываются используемые на каждом шаге команды:

LOAD DATA

LOAD DATA. Эта команда указывает утилите SQLLDR, что необходимо сделать (в данном случае - загрузить данные). А еще можно указывать действие CONTINUE LOAD

для возобновления загрузки. Эта опция используется только для продолжения непосредственной загрузки нескольких таблиц.

INFILE *

INFILE *. Эта конструкция указывает SQLLDR, что данные, которые необходимо загрузить, находятся в самом управляющем файле (см. ниже). В этой конструкции можно также указать имя другого файла, содержащего данные. При необходимости в командной строке можно переопределить имя файла, задаваемого в конструкции INFILE. Учтите, что опции командной строки имеют преимущество над установками, заданными в управляющем файле, как будет рассмотрено в разделе Предупреждения .

INTO TABLE DEPT

INTO TABLE DEPT. Эта конструкция указывает, в какую таблицу загружаются данные; в нашем случае это таблица DEPT.

FIELDS TERMINATED BY ,

FIELDS TERMINATED BY Эта конструкция указывает, что данные будут представлены в виде списка значений через запятую. Есть десятки способов описать загружаемые данные в SQLLDR, это - лишь один из наиболее часто используемых.

(DEPTNO, DNAME, LOC

(DEPTNO, DNAME, LOC). Эта конструкция указывает, какие столбцы загружаются, их порядок следования в загружаемых данных и типы. При этом указываются типы данных во входном потоке, а не типы соответствующих столбцов в базе данных. В нашем случае используется стандартный формат CHAR(255), что вполне подходит.

BEGINDATA

BEGINDATA. Эта конструкция указывает утилите SQLLDR, что описание загружаемых данных закончено и что со следующей строки идут данные, которые необходимо загрузить в таблицу DEPT:

10,Sales,Virginia 20.Accounting,Virginia 3 0,Consulting,Virginia 40,Finance,Virginia

Итак, вот управляющий файл в одном из наиболее простых и типичных форматов - для загрузки в таблицу данных со столбцами, определяемыми разделителем. В этой гла-



Загрузка данн1х 457

ве будут рассмотрены намного более сложные примеры, но для начального знакомства он вполне пригоден. Чтобы применить этот управляющий файл, достаточно создать пустую таблицу DEPT:

tkyte@TKYTE816> create table dept

2 (deptno number(2) constraint emp pk primary key,

3 dname varchar2(14) ,

4 loc varchar2(13)

Table created.

и выполнить следующую команду:

C:\sglldr>sqlldr userid=tkyte/tkyte control=demol.ctl

SQLLDR: Release 8.1.6.0.0 - Production on Sat Apr 14 10:54:56 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Commit point reached - logical record count 4

Если таблица не пуста, будет выдано сообщение об ошибке:

SQLLDR-601: For INSERT option, table must be empty. Error on table DEPT

Так происходит потому, что в управляющем файле используются почти исключительно стандартные установки, а стандартно при загрузке выполняется операция INSERT (еще возможны APPEND, TRUNCATE или REPLACE). При выполнении операции INSERT предполагается, что таблица пуста. Если необходимо добавить записи в таблицу DEPT, можно указать операцию APPEND, а для замены данных в таблице DEPT -

операцию REPLACE или TRUNCATE.

При каждой попытке загрузки генерируется журнальный файл. Журнальный файл для нашего примера будет иметь следующий вид:

SQLLDR: Release 8.1.6.0.0 - Production on Sat Apr 14 10:58:02 2001

(с) Copyright 1999 Oracle Corporation. All rights reserved.

Control File: demol.ctl

Data File: demol.ctl

Bad File: demol.bad

Discard File: none specified

(Allow all discards)

Number to load: ALL

Number to skip: 0

Errors allowed: 50

Bind array: 64 rows, maximum of 65536 bytes

Continuation: none specified

Path used: Conventional

Table DEPT, loaded from every logical record.

Insert option in effect for this table: INSERT



Глава 9

Column Name

Position Len Term Encl Datatype

DEPTNO

DNAME

FIRST NEXT NEXT

CHARACTER CHARACTER CHARACTER

Table DEFT:

4 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: 49536 bytes(64 rows)

Space allocated for memory besides bind array: 0 bytes

Total logical

Total logical

Total logical

Total logical

records skipped: records read: records rejected: records discarded:

2001 2001

Run began on Sat Apr 14 10:58:02 Run ended on Sat Apr 14 10:58:02

Elapsed time was: 00:00:00.11

CPU time was: 00:00:00.04

В журнальном файле представлены различные характеристики выполненной загрузки. Можно увидеть использованные опции (стандартные или явно указанные). Можно узнать, сколько записей прочитано, сколько из них было загружено и т.д. Указаны имена файлов BAD и DISCARD. Указана даже продолжительность загрузки. Журнальные файлы позволяют проверить, успешно ли прошла загрузка, и не было ли сообщений об ошибках. Если при загрузке данных были ошибки SQL (загружаемые данные - плохие , и соответствующие записи помещены в BAD-файл), эти ошибки записываются в журнальный файл. Информация в журнальном файле не нуждается в комментариях, поэтому мы не будем его рассматривать.

Как сделать...

Теперь мы переходим к наиболее часто задаваемым, по моему опыту, вопросам о загрузке и выгрузке данных из базы данных Oracle с помощью утилиты SQLLDR.

Загрузка данных с разделителями

Данные с разделителями, т.е. разделенные некоторым специальным символом и, возможно, взятые в кавычки, - наиболее популярный в настоящее время формат обычных файлов. На больших ЭВМ чаще всего используются файлы с записями фиксированной длины и фиксированного формата, но в UNIX и NT нормой при обмене данными является текстовый файл с разделителями. В этом разделе мы изучим популярные опции, используемые при загрузке данных с разделителями.



1 ... 139 140 141 [ 142 ] 143 144 145 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика