У меня проблемы с пакетом UTL_MAIL в Oracle 10g, и мне было интересно, есть ли у кого-нибудь решения?
Я подключаюсь к своей БД как SYSMAN и загружаю следующие два сценария;
@C: \ оракул \ продукт \ 10.2.0 \ db_1 \ rdbms \ admin \ utlmail.sql
@C: \ оракул \ продукт \ 10.2.0 \ db_1 \ rdbms \ admin \ prvtmail.plb
Я настроил SMTP-сервер;
ALTER SYSTEM SET smtp_out_server = 'mymailserver.fake: 25' SCOPE = BOTH;
Я даю пользователю необходимое разрешение;
GRANT выполнить НА utl_mail TO MYUSER;
Но если я подключусь к «MYTABLESPACE» (где существует MYUSER), я получу следующую ошибку, если сделаю ссылку на UTL_MAIL.SEND;
PLS-00201: должен быть объявлен идентификатор 'UTL_MAIL.SEND'
Если я поставлю перед ним префикс SYSMAN (SYSMAN.UTL_MAIL.SEND), он будет работать, но я не хочу этого делать, поскольку эта процедура, содержащая этот вызов, не знает табличного пространства, в котором установлены сценарии.
Есть ли способ установить эти сценарии, чтобы они были доступны для всех и не требовали префикса SYSMAN для выполнения?
Ваше здоровье,
Крис





Похоже, вам нужно создать ОБЩЕСТВЕННЫЙ СИНОНИМ для пакета ..
CREATE PUBLIC SYNONYM UTL_MAIL FOR SYSMAN.UTL_MAIL;
Я почти уверен, что единственной разницей будут общедоступные синонимы.
SELECT * FROM ALL_SYNONYMS WHERE OWNER = 'PUBLIC' and table_name LIKE 'UTL%'
подтвердит или опровергнет
войдите в систему как sys и запустите скрипты
попробуйте ALTER SYSTEM SET smtp_out_server='mymailserver.fake:25' SCOPE=BOTH; как пользователь, вы выполняете процедуру, а не как sys.
т.е.
подключитесь к MYTABLESPACE as MYUSER и запустите сеанс изменения
Надеюсь, все ясно
Помимо добавления синонима
PUBLIC, рекомендуется устанавливать его с помощьюSYSDBAв соответствии с рекомендациями экспертов Oracle. Подробнее здесь: dba-oracle.com/oracle_tips_10g_utl_mail.htmoracle-base.com/articles/10g/plsql-enhancements-10g#UTL_MAIL