Adr*_*ian 1 sql oracle plsql oracle-sqldeveloper
[解释]
如果我想创建一个属于模式'A'的函数,我的理解是我需要在模式'A'中创建包,并实现函数.(如果还有其他办法,请纠正我).
如果我试图使用脚本文件创建一个函数(例如.新图库 - > SQL文件(数据库文件)来创建untitled.sql),我会感到困惑,因为该函数不属于任何模式,它将被存储在全球.
[问题]
1)如何创建函数属于使用脚本的模式'A'?
2)存储在全局的函数无法访问模式表,我该如何解决?

我完全同意Ascalonian.为了您的问题,我将提供有关如何使用SQL Developer的GUI工具创建函数的说明,这将生成一个脚本.
在很多方面,我宁愿使用SQL*Plus.为了我的例子,我将使用标准的Oracle示例模式SCOTT.
问题1:如何使用脚本创建函数
注意:我将展示如何使用SQL Developer中的GUI工具创建此函数,并生成脚本
如果您已登录数据库用户SCOTT,只需右键单击用户SCOTT的功能并选择"新功能"

将打开"创建函数"对话框.

您只需修改名称以符合您的命名约定和项目.选择您的选项,然后选择确定.接下来在代码编辑器中,更多地修改函数以满足您的需求:

这是我的最终草案.选择"编译":

现在它显示并显示为SCOTT拥有的功能对象.GUI工具生成脚本函数而不限定SCOTT的所有权.如果没有符合条件,则默认情况下该函数由SCOTT拥有.:

如果我在以SCOTT身份登录的SQL Developer工作表中调用此函数,我们在此处看到它:

通常,如果要与所有用户共享对象,则标准方法是将执行授予公共或创建公共同义词.以下是向公众授予执行权的示例:

然后,您可以与其他用户检查您的权限:

通常,使用此GUI工具很不错,可以帮助您获得正确的语法.过了一段时间,你可能会放弃这个(相当缓慢和麻烦).
问题2:存储在全局的函数无法访问模式表,我该如何解决?
有许多方法可以解决如何在表上授予选择访问权限的方法.
在我的示例中,可以将表上的select授予函数所有者SCOTT.
你可以这样做:
GRANT SELECT ON OTHER_SCHEMA.PRECIOUS_TABLE TO SCOTT;
另一种常见方法可能是将系统特权SELECT ANY TABLE授予SCOTT.当然,应始终考虑安全性,并应遵守授予最少特权以完成任务的原则.