PL / SQL:如何确保函数存在?

时间:2013-05-06 00:01:52

标签: sql plsql oracle11g

好吧,我面对"权限不足"运行PL / SQL函数时出现问题:

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

代码:

sqlplus / as sysdba

我得到了SQL>在那边提示,然后我试图授予我的功能和#34;年龄"如下:

代码:

 SQL> GRANT EXECUTE on AGE to SCOTT;

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

我参考以下文档:

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

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

请帮忙!

1 个答案:

答案 0 :(得分:1)

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

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

GRANT EXECUTE ON foobar.age TO scott

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

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

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

    SELECT status
    FROM all_objects
    WHERE owner = 'FOOBAR'
      AND object_type = 'FUNCTION'
      AND object_name = 'AGE'