0

好吧,我在运行 PL/SQL 函数时遇到了“权限不足”的问题:

以下是我遵循的步骤: 在我的 Windows 命令提示符中,我按如下方式登录:

代码:

sqlplus / as sysdba

我在那里得到了 SQL> 提示,然后我尝试授予我的函数“age”的权限,如下所示:

代码:

 SQL> GRANT EXECUTE on AGE to SCOTT;

其中,AGE 是函数名,SCOTT 是用户

我指的是以下文档:

http://www.techonthenet.com/oracle/grant_revoke.php

我收到错误 ORA-0402:函数体不存在。如何在发出 GRANT 之前保存我的函数体?

请帮忙 !

4

1 回答 1

3

为确保发出正确的授权,请[schema].[object]在引用函数时使用完全限定名称。否则,您将依赖指向正确对象的公共同义词。该功能必须存在才能授予它,尽管它可能不是有效状态。您不能对不存在的对象发出授权(除了 catch allEXECUTE ANY授权,但这是一个特殊的数据库角色)。

例如,如果架构是FOOBAR并且函数名称是,AGE那么您将发出:

GRANT EXECUTE ON foobar.age TO scott

此外,在使用该功能时,请确保:

  1. 有一个指向函数的公共同义词,并且不存在隐藏公共同义词的本地同义词
  2. 或 .. 该函数有一个本地同义词(例如SCOTT,有一个指向 的本地同义词FOOBAR.AGE
  3. 或...您通过其完全限定名称引用该函数(例如,通过FOOBAR.AGE()

要检查函数本身是否有效,您可以查询ALL_OBJECTS并检查该STATUS列:

SELECT status
FROM all_objects
WHERE owner = 'FOOBAR'
  AND object_type = 'FUNCTION'
  AND object_name = 'AGE'
于 2013-05-06T00:15:07.440 回答