[说明]
如果我想创建一个属于架构'A'的函数,我的理解是我需要在架构'A'中创建包,并实现功能。 (如果还有其他办法,请纠正我。)
如果我正在尝试使用脚本文件(例如。新图库 - > SQL文件(数据库文件)创建无标题的zql)来创建函数,我会感到困惑,因为该函数不属于任何架构,它将存储在Global中。
[问题]
1)如何使用脚本创建函数属于模式'A'?
2)存储在global中的函数无法访问模式表,我该如何解决?
答案 0 :(得分:5)
我完全同意Ascalonian。为了您的问题,我将提供有关如何使用SQL Developer的GUI工具创建函数的说明,这将生成一个脚本。
在很多方面,我宁愿使用SQL * Plus。为了我的例子,我将使用标准的Oracle示例模式SCOTT。
问题1:如何使用脚本创建功能
注意:我将展示如何使用SQL Developer中的GUI工具创建此函数,并生成脚本
如果您已登录数据库用户SCOTT,只需右键单击用户SCOTT的功能并选择“新功能”
将打开“创建功能”对话框。
您只需修改名称以符合您的命名约定和项目。选择您的选项,然后选择确定。
接下来在代码编辑器中,更多地修改函数以满足您的需求:
这是我的最终草案。选择“编译”:
现在它显示并显示为SCOTT拥有的功能对象。 GUI工具生成脚本函数而不限定SCOTT的所有权。如果没有符合条件,则默认情况下该函数由SCOTT拥有。 :
如果我在以SCOTT身份登录的SQL Developer工作表中调用此函数,我们在此处看到:
通常,如果要与所有用户共享对象,则标准方法是将执行授予公共或创建公共同义词。以下是向公众授予执行权的示例:
然后,您可以与其他用户核对您的权限:
一般情况下,使用此GUI 工具很好,可以帮助您获得正确的语法。过了一段时间,你可能会放弃这个(相当缓慢和麻烦)。
问题2:存储在global中的函数无法访问架构表,我该如何解决?
有很多方法可以解决如何在表上授予选择权限。
通过我的示例,可以将表格上的select授予函数所有者SCOTT。
你可以这样做:
GRANT SELECT ON OTHER_SCHEMA.PRECIOUS_TABLE TO SCOTT;
另一种常见方法可能是将系统特权SELECT ANY TABLE授予SCOTT。当然,应始终考虑安全性,并应遵守授予最少特权以完成任务的原则。
答案 1 :(得分:4)
您无需使用包来创建函数。函数可以是独立的对象。
通过阅读有关如何创建函数的Oracle Documentation,可以找到创建函数的脚本。
要在特定架构中创建它,只需将架构名称添加到函数名称或以其他用户身份登录。
注意:如果要在其他架构中创建函数,则需要具有 CREATE ANY PROCEDURE 权限。