Мы выполняем два запроса, чтобы это «волшебство» произошло.
Если вы пользователь с высоким уровнем привилегий, доступ к представлениям DBA_, мы запускаем это (это намного быстрее, чем представления ALL_)
SELECT 'CREATE OR REPLACE ' || text source,
line
FROM dba_source
WHERE owner = :owner
AND name = :name
AND line = 1
AND type = 'PACKAGE'
UNION ALL
SELECT text,
line
FROM dba_source
WHERE owner = :owner
AND name = :name
AND line != 1
AND type = 'PACKAGE'
ORDER BY line
И затем мы запускаем это:
SELECT 'CREATE OR REPLACE ' || text source,
line
FROM dba_source
WHERE owner = :owner
AND name = :name
AND line = 1
AND type = 'PACKAGE BODY'
UNION ALL
SELECT text,
line
FROM dba_source
WHERE owner = :owner
AND name = :name
AND line != 1
AND type = 'PACKAGE BODY'
ORDER BY line
Ваш полученный файл будет иметь код CREATE или REPLACE для SPEC, за которым следует символ '/', а затем то же самое для BODY.
Если у вас есть пользователь с меньшими привилегиями, мы выполним в основном тот же запрос, но с представлениями ALL_.
Вы генерируете код из собственной или чужой схемы?
Какую версию SQL Developer и Oracle вы используете?
Попробуйте вопросы ниже и посмотрите, что вы получите.
Вы можете увидеть, что мы делаем для себя, наблюдая за панелью «Просмотр - Журнал» и разделом «Заявления»: