Oracle SQL Developer - 使用脚本创建函数

时间:2014-10-07 19:32:47

标签: sql oracle plsql oracle-sqldeveloper

[说明]
如果我想创建一个属于架构'A'的函数,我的理解是我需要在架构'A'中创建包,并实现功能。 (如果还有其他办法,请纠正我。) 如果我正在尝试使用脚本文件(例如。新图库 - > SQL文件(数据库文件)创建无标题的zql)来创建函数,我会感到困惑,因为该函数不属于任何架构,它将存储在Global中。

[问题]
1)如何使用脚本创建函数属于模式'A'? 2)存储在global中的函数无法访问模式表,我该如何解决?

enter image description here

2 个答案:

答案 0 :(得分:5)

我完全同意Ascalonian。为了您的问题,我将提供有关如何使用SQL Developer的GUI工具创建函数的说明,这将生成一个脚本。

在很多方面,我宁愿使用SQL * Plus。为了我的例子,我将使用标准的Oracle示例模式SCOTT。

问题1:如何使用脚本创建功能

注意:我将展示如何使用SQL Developer中的GUI工具创建此函数,并生成脚本

如果您已登录数据库用户SCOTT,只需右键单击用户SCOTT的功能并选择“新功能”

enter image description here

将打开“创建功能”对话框。 enter image description here

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

这是我的最终草案。选择“编译”:  enter image description here

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

enter image description here

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

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

enter image description here

然后,您可以与其他用户核对您的权限:

enter image description here

一般情况下,使用此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 权限。