|
Программирование >> Oracle
Импорт и экспорт 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
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |