Создание представления с учетной записью DBA и предоставление SELECT для этого представления должно работать:
CREATE VIEW dba_source_pkg_headers AS
SELECT *
FROM dba_source
WHERE type = 'PACKAGE';
GRANT select ON dba_source_pkg_headers TO your_user;
обновление: это не будет работать с неупакованными функциями и процедурами. Я не думаю, что вы можете разделить заголовок и тело с помощью обычных функций / процедур.
Если вы используете обычные функции и процедуры, вы можете предоставить select на dba_arguments
, это даст вам доступ ко всем параметрам функции / процедуры.