【发布时间】:2017-10-15 21:05:15
【问题描述】:
我为一个包创建了一个同义词,但我不能用它做任何事情,包括一个简单的 desc 命令。查看代码:
创建包 sql(在所有者用户上执行)
create or replace PACKAGE pkg_elmah$log_error
IS
PROCEDURE LogError
(
v_ErrorId IN elmah$error.errorid%TYPE,
v_Application IN elmah$error.application%TYPE,
v_Host IN elmah$error.host%TYPE,
v_Type IN elmah$error.type%TYPE,
v_Source IN elmah$error.source%TYPE,
v_Message IN elmah$error.message%TYPE,
v_User IN elmah$error.username%TYPE,
v_AllXml IN elmah$error.allxml%TYPE,
v_StatusCode IN elmah$error.statuscode%TYPE,
v_TimeUtc IN elmah$error.timeutc%TYPE
);
END pkg_elmah$log_error;
创建同义词并测试 sql(在非所有者用户上执行)
CREATE SYNONYM pkg_elmah$log_error FOR DRSP.pkg_elmah$log_error;
desc pkg_elmah$log_error;
---------RESULT: object does not exist
execute pkg_elmah$log_error.logerror;
---------RESULT: identifier pkg_elmah$log_error must be declared
当我使用这些对象的所有者登录时,这些代码运行良好。
Grant 给出如下(我似乎无法只给出程序,因为它给出了 ORA-04042,所以我把它交给了包):
grant execute on PKG_ELMAH$LOG_ERROR to not_owner
环境:WINDOWS 7 64bits; SQL 开发者 4.0.3.16; ORACLE 客户端 11.2
【问题讨论】:
-
我假设您向同义词所有者提供了授权执行,对吧?
-
我把赠款给了包裹,因为我似乎不能只为这个程序做。
-
将架构添加到命令
CREATE SYNONYM [SCHEMA].pkg_elmah$log_error FOR DRSP.pkg_elmah$log_error; -
试过了,错误是一样的。
-
您确定您确实执行了授权,并且之后没有 - 比如说 - 删除并重新创建包吗?您仍然会从您的电话中获得 PLS-00306,但 PLS-00201 应该会随着授权的到位而消失。 (您可以尝试在授权后以非所有者身份重新连接,但这不是必需的)。