#oracle #email
Вопрос:
У меня возникли небольшие проблемы с пакетом UTL_MAIL в Oracle 10g, и мне было интересно, есть ли у кого-нибудь какие-либо решения?
Я подключаюсь к своей базе данных как системный пользователь и загружаю следующие два сценария;
@C:oracleproduct10.2.0db_1rdbmsadminutlmail.sql
@C:oracleproduct10.2.0db_1rdbmsadminprvtmail.plb
Я настроил SMTP-сервер;
ИЗМЕНИТЬ СИСТЕМНЫЙ НАБОР smtp_out_server=’mymailserver.fake:25′ ОБЛАСТЬ ДЕЙСТВИЯ=ОБА;
Я предоставляю пользователю необходимое разрешение;
ПРЕДОСТАВЬТЕ выполнение НА utl_mail МОЕМУ ПОЛЬЗОВАТЕЛЮ;
Но затем, если я подключусь к «MYTABLESPACE» (где существует МОЙ ПОЛЬЗОВАТЕЛЬ), я получу следующую ошибку, если сделаю ссылку на UTL_MAIL.SEND;
PLS-00201: идентификатор ‘UTL_MAIL.»ОТПРАВИТЬ» должно быть объявлено
Если я добавлю к нему префикс SYSMAN (SYSMAN.UTL_MAIL.SEND), это работает, но я не хочу этого делать, так как эта процедура, содержащая этот вызов, не знает табличного пространства, в котором установлены сценарии.
Есть ли способ установить эти сценарии так, чтобы они были доступны повсеместно и не требовали для выполнения префикса SYSMAN?
Овации,
Крис
Комментарии:
1.в дополнение к добавлению
PUBLIC
синонима, желательно, чтобы вы установили его, используяSYSDBA
, как советуют эксперты Oracle. Подробнее читайте здесь: dba-oracle.com/oracle_tips_10g_utl_mail.htm oracle-base.com/articles/10g/plsql-enhancements-10g#UTL_MAIL
Ответ №1:
Я почти уверен, что публичные синонимы будут единственной разницей.
SELECT * FROM ALL_SYNONYMS WHERE OWNER = 'PUBLIC' and table_name LIKE 'UTL%'
подтвердит или опровергнет
Ответ №2:
Похоже, вам нужно создать ОБЩЕДОСТУПНЫЙ СИНОНИМ для пакета..
CREATE PUBLIC SYNONYM UTL_MAIL FOR SYSMAN.UTL_MAIL;
Ответ №3:
попробуйте ALTER SYSTEM SET smtp_out_server='mymailserver.fake:25' SCOPE=BOTH;
выполнить процедуру от имени пользователя, а не от имени системы.
т. е. подключитесь MYTABLESPACE as MYUSER
и запустите сеанс изменения, надеюсь, все ясно
Ответ №4:
войдите в систему как sys и запустите сценарии