Записки жертвы высоких технологий

    Здравствуйте! Мой блог посвящен в большей своей части моей профессиональной деятельности на поприще использования технологий ORACLE для разработки баз данных OLTP и OLAP хранилищ данных. В заметках я периодически размещаю разнообразные SQL, PL/SQL и Java скрипты написанные мной и не только мной, ссылки на интересные источники в сети либо другую полезную информацию, которая каким либо образом касается моей работы с замечательными продуктами компании ORACLE.
    Вы можете связаться со мной по контактному емейлу, если у вас есть какие-либо вопросы, связанные с разработкой баз данных на основе продуктов ORACLE, буду рад помочь вам, если это будет в моих силах.

2 окт. 2009 г.

Пакет DBMS_METADATA

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;

Комментариев нет: