DBMS_METADATA - очень удобная штука, рекомендую всем пользоваться этим средством, так как удобные, генераторы скриптов в TOAD и PL/SQL Developer'e не всегда корректно генерируют SQL скрипты. Кстати, отдаю должное разработчикам PL/SQL Developer'a, которые признали этот факт и приняли простое и эффективное решение - использовать DBMS_METADATA как альтернативый генератор скриптов. Советую немножко предварительно покурить док, дабы понимать, что к чему. Вот например привожу скрипт, который генерирует скрипт, создающий все индексы текущей схемы. Скрипт выводится в стандартный поток вывода с помощью DBMS_OUTPUT.
declare
l_n number;
l_t number;
l_data clob;
begin
l_n := dbms_metadata.open(object_type => 'INDEX');
l_t := dbms_metadata.add_transform(handle => l_n,name => 'DDL');
dbms_metadata.set_transform_param(transform_handle => DBMS_METADATA.SESSION_TRANSFORM,name => 'SQLTERMINATOR',value => TRUE);
for hCur in ( select * from user_indexes ) loop
l_data := dbms_metadata.get_ddl(object_type => 'INDEX', name => hCur.Index_Name);
dbms_output.put_line('drop index ' || hCur.Index_Name || ';');
dbms_output.put_line(dbms_lob.substr(l_data, 1024, 1));
end loop;
dbms_metadata.close(l_n);
end;
Комментариев нет:
Отправить комментарий