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

1 ... 129 130 131 [ 132 ] 133 134 135 ... 469


Импорт и экспорт 425

About to export specified tables via Conventional Path ...

. . exporting table ADDED A COLUMN 1 rows exported

. . exporting table DROPPED A COLUMN 1 rows exported

. . exporting table MODIFIED A COLOMN 1 rows exported

Export terminated successfully without warnings.

Итак, создан тестовый пример. Мы экспортировали три таблицы как они есть . Теперь давайте их изменим:

tkyte@TKYTE816> alter table added a colunn add (у int) ; Table altered.

tkyte@TKYTE816> alter table dropped a column drop column y; Table altered.

tkyte@TKYTE816> delete from modified a column; 1 row deleted.

tkyte@TKYTE816> alter table modified a column modify у date; Table altered.

Теперь, если попытаться импортировать данные, с таблицей ADDED A COLUMN

все получится, а вот с остальными - нет:

tkyte@TKYTE816> host imp userid=tkyte/tkyte full=y ignore=y

Import: Release 8.1.6.0.0 - Production on Tue Mar 20 09:02:34 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved.

Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production

With the Partitioning option

JServer Release 8.1.6.0.0 - Production

Export file created by EXPORT:V08.01.06 via conventional path

import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set

. importing TKYTEs objects into TKYTE

. . importing table ADDED A COLUMN 1 rows imported

. . importing table DROPPED A COLUMN

IMP-00058: ORACLE error 904 encountered ORA-00904: invalid column name

. . importing table MODIFIED A COLUMN

IMP-00058: ORACLE error 932 encountered

ORA-00932: inconsistent datatypes

Import terminated successfully with warnings.

Следующий шаг - создать представления в базе данных, аналогичные исходным таблицам. Для этого:

переименуем таблицы на время импортирования;

создадим представления, выбирающие константы нужного типа; например,

SELECT 1 - для чисел, SELECT SYSDATE - для дат, SELECT RPAD(*, 30, *) - для VARCHAR2(30) и так далее;



Глава 8

создадим триггер INSTEAD OF, который будет выполнять все необходимые действия (преобразование/сопоставление данных).

Вот код для этого:

tkyte@TKYTE816> rename modified a column to modified a column TEMP; Table renamed.

tkyte@TKYTE816> create or replace view modified a column

2 as

3 select 1 x, 1 у from modified a column TEMP; View created.

tkyte@TKYTE816> create or replace trigger modified a column IOI

instead of insert begin

on modified a column

insert into (x, y) values (:new.x.

modified a column TEMP

to date(01012001,ddmmyyyy)+:new.y);

end;

Trigger created.

Здесь мы преобразуем данные типа NUMBER, хранящиеся в столбце Y, в смещение от 1 января 2001 года. Выполните необходимые преобразования: из STRING - в DATE, из DATE - в NUMBER, из NUMBER - в STRING и так далее. Теперь позаботимся об удаленном столбце:

tkyte@TKYTE816> rename dropped a column Table renamed.

to dropped a column TEMP;

tkyte@TKYTE816> create or replace view dropped a column

2 as

3 select 1 x, 1 у from dropped a column TEMP; View created.

tkyte@TKYTE816> create or replace trigger dropped a column IOI

instead begin

end;

of insert on dropped a column

insert

values (:new.x) ;

into dropped a column TEMP

Trigger created.

Здесь мы избавились от столбца :new.y. Мы ничего с ним не делаем, просто игнорируем. Он должен быть в представлении, куда бы утилита IMP могла вставлять данные. Теперь все готово для повторного импортирования:

tkyte@TKYTE816> host imp userid=tkyte/tkyte full=y ignore=y

Import: Release 8.1.6.0.0 - Production on Tue Mar 20 09:21:41 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved.



Импорт и экспорт 427

Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production

With the Partitioning option

JServer Release 8.1.6.0.0 - Production

Export file created by EXPORT:V08.01.06 via conventional path

import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set

. importing TKYTEs objects into TKYTE

. .. importing tale ADDED A COLOMN 1 rows imported

. . importing table DROPPED A COLDMN 1 rows imported

. . importing table MODIFIKD A COLUMN 1 rows imported

Import terminated successfully without warnings.

Импортирование выполняется без ошибок. Теперь необходимо удалить представления и переименовать таблицы:

tkyte@TKrE816> drop view modified a column; View dropped.

tkyte@TKYE816> drop view dropped a column; view dropped.

tkyte@TKYTE816> rename dropped a column TEMP to dropped a column; Table renamed.

tkyte@TKrE816> rename modified a column TEMP to modified a column; Table renamed.

Анализируя данные, мы увидим следующее:

три строки в таблице addedacolumn - одна исходная и две импортированные;

две строки в таблице droppedacolumn - результат исходной вставки и одного успешного импорта;

одна строка в таблице modifiedacolumn, поскольку перед изменением типа столбца пришлось все строки из этой таблицы удалить.

А вот что мы получаем:

tkyte@TKYTE816> select * from added a column; X Y

1 1 1

tkyte@TKYTE816> select * from dropped a column; X

tkyte@TKYTE816> select * from modified a column;

1 02-JAN-01




1 ... 129 130 131 [ 132 ] 133 134 135 ... 469

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