ORACLE - Экспорт процедур / пакетов в файл - PullRequest
3 голосов
/ 02 апреля 2009

Я хотел бы программно экспортировать свои процедуры / функции и пакеты в отдельные файлы (в качестве резервной копии) и использовать Oracle 9.2.

Наиболее близким решением, которое я нашел, было использование DBMS_METADATA.GET_DDL, но как вывести CLOB в текстовый файл, не теряя при этом никаких частей (из-за длины или отступа)?

Или, может быть, у вас есть другие решения для резервного копирования пакетов или других функций по отдельности (только тот, который мне нужен, а не все)?

Спасибо

Ответы [ 4 ]

3 голосов
/ 02 апреля 2009

Попытка получить CLOBS (и LONGS) из утилит командной строки, таких как SQL * Plus, всегда вызывает проблемы с форматированием / усечением. Моим решением было написать простую утилиту на языке проверки типов (Perl), которая использует DBMS_METADATA, чтобы вернуть CLOB обратно в строку.

Отрывок:

...

$sthRef = $dbhRef->prepare("select dbms_metadata.get_ddl(?,?) from dual");

$sthRef->execute('PACKAGE', $thisName);

while (($thisDDL) = $sthRef->fetchrow()) {

  print $thisDDL;

}

$sthRef->finish;

...

1 голос
/ 28 ноября 2013
SET pages 0
spool proclist.sql
SELECT
CASE line
WHEN 1 THEN
'CREATE OR REPLACE ' || TYPE || ' ' || NAME || CHR(10) || text
ELSE
text
END
FROM user_source
WHERE TYPE IN ( 'PROCEDURE','FUNCTION')
ORDER BY name, line;
spool OFF
exit 
1 голос
/ 02 апреля 2009

Если вы хотите получить DDL, на самом деле нет другого пути, кроме DBMS_METADATA, как вы уже сказали.

Обычно такое резервное копирование выполняется с помощью exp (или expdp), хотя при этом не создается файл SQL, как это было бы в большинстве других систем СУБД.

0 голосов
/ 17 мая 2017

Спасибо за РАН, гость за ответ, Мне нужно было получить коды только для некоторых процедур, поэтому я попробовал код, чтобы обнаружить, что этот код усекает код после имени процедуры в первой строке кода и заменяет его тремя точками '...'

поэтому я изменил код на следующий:

   SELECT CASE line
      WHEN 1 THEN 'CREATE OR REPLACE ' -- || TYPE || ' ' || NAME || --CHR(10) || ' (' 
            || text
   ELSE
      text
   END
   FROM user_source
   WHERE TYPE IN ( 'PROCEDURE') and name like 'SomeThing%'
   ORDER BY name, line;

и эта страница процедуры экспорта и триггеры иметь очень полезный код:

   connect fred/flintstone;

   spool procedures_punch.lst

   select
      dbms_metadata.GET_DDL('PROCEDURE',u.object_name)
      from
      user_objects u
   where
      object_type = 'PROCEDURE';

   spool off;

Окончательный способ сделать это с помощью браузера схемы жабы, затем выбрать все необходимые процедуры и щелкнуть правой кнопкой мыши, а затем выбрать экспорт из меню.

...