oracle sql developer是oracle为大众提供的一款免费的图形化数据库开发工具本文主要介绍怎样利用sql和xml脚本来扩展oracle sql developer……
【it专家网独家】作为oracle为大众提供的一款免费的图形化数据库开发工具,oracle sql developer不仅仅自备了强大的报表功能,还给予用户自主开发的权利,用户可以依自己的特定需求创建扩展功能并添加其中,本文主要介绍怎样利用sql和xml脚本来扩展oracle sql developer。
无论一个软件能够多么正确的执行你的指令,你总希望它能够再增加一些小小的功能让你使用起来更为得心应手。假如你经常使用的一款软件并不包含一些你需要用到的关键功能,但如果这款软件是可扩展的,你就可以把自己所需的功能添加其中。oracle sql developer恰恰能够为你做到这一点。
不管你是dba还是数据库开发人员,你都可以在oracle sql developer里通过添加右键菜单来执行一条sql指令或是进一步增加向导驱动对话框来引导完成一个操作进程。通过以下几种方式可以扩展oracle sql developer的功能:
- 设置参数
- 利用xml、sql和 oracle 数据字典创建扩展功能
- 利用java创建扩展功能
本文将为大家介绍oracle sql developer的扩展,首先描述如何共享报表,然后研究如何构建一个基于xml的扩展并以此在连接导航器中添加右键菜单(了解xml的相关知识将有助于建立基于xml的扩展)。
共享报表
oracle sql developer提供了多种通用系统报表,同时也可根据你的需要自行创建。
为了能与你的团队成员共享你的报表,首先需要创建一个共享报表文件夹。你不需要编写任何的代码,所以共享报表文件夹可能是最容易添加到oracle sql developer中扩展了。
为了共享报表,先要将其输出。你可以按照类别一次性输出全部自定义报表,也可以逐个输出。建议将相似的报表分门别类整理。举个例子,你可以把所有关于对象和系统权限的系统报表归入data dictionary reports -> security -> grant and privileges目录下。
假设,你在名为team security的文件夹中有一套自定义的安全报表。要输出这些报表,首先选择该文件夹,右击调用右键菜单,并选择export。在弹出的对话框中,赋予该文件一个一目了然的名字,例如teamsecurity.xml,并在服务器上设置好其文件系统中的位置,以便让那些需要该报表的人能方便的找到它。
为使你的团队成员能够获取共享报表,可以通过以下方式建立共享报表文件夹。首先在tool选项卡上选择preferences。展开database节点,并选择user defined extensions。在显示的用户自定义扩展对话框中,点击add row,然后点击进入type域,从下拉列表中选择report。点击进入location域,点击browse选择该文件存储路径。关闭并重新启动oracle sql developer以激活该扩展。最后,打开reports导航器,我们会发现添加的shared reports节点已可使用。您可以用同样的办法添加多个文件夹或个别报表。
添加右键菜单
在oracle sql developer中添加右键菜单需要联合使用sql和xml。sql提供你要执行的命令,而xml为该命令提供框架。假设这样一个情况,oracle sql developer没有提供能够让你删除表格一个图形界面,而你却希望能在右键点击表格后在菜单中选择drop完成此操作。listing 1中的代码可以帮助你把该功能添加到oracle sql developer中。
代码listing 1: 右键菜单mydrop的代码
<items>
<folder type="table">
<name>userdefined contextmenus</name>
<item type="table" reloadparent="true">
<title>mydrop menu</title>
<prompt type="check">
<label>cascade constraints</label>
<value>cascade constraints</value>
</prompt>
<prompt type="confirm"> <label>are you sure you want to drop this table? you will not be asked again!</label>
</prompt>
<sql>
<![cdata[drop table "#object_owner#"."#object_name#" #0#]]>
</sql>
<help>this action drops the selected table.</help>
<confirmation>
<title>confirmation</title>
<prompt>table "#object_name#" has been dropped</prompt>
</confirmation>
</item>
</folder>
</items>
复制listing1中的代码,并将其粘贴到一个新的文件中,如droptable.xml。然后在oracle sql developer的tools选项卡上选择preferences。展开database节点,并选择user defined extensions。点击add row,然后点击进入type域,从下拉列表中选择action。点击进入location域,点击browse选择droptable.xml文件存储路径。就像激活共享报表扩展一样,关闭并重新启动oracle sql developer以激活这个新的扩展。
接下来,打开一个用户连接,如hr,并展开tables节点。选择一个表,并右击打开右键菜单。listing1中的代码(即droptable.xml文件中的代码)在表格的右键菜单中添加了一个名为userdefined contextmenus的新目录。导航至新的右键菜单,选择新的子菜单mydrop,即可调用drop对话框。单击help可浏览帮助文档。选择sql选项卡可以浏览将被执行的代码。单击cancel可在不删除表格的情况下退出该对话框。
检查代码
右键菜单mydrop的目的是为当前用户删除选定的表格。这意味着你希望执行这样一条sql查询:
drop table hr.dept cascade constraints
如果你希望让用户能够自行决定是否删除与外键关联的约束条件,可把cascade constraints字符串设置为变量。
以listing1为指南,让我们下钻到代码并看看不同的段所产生的影响。
listing1, #1:第一段,即listing 1, #1,可以在右键主菜单中添加新的右键菜单目录。如果你希望在最上层添加右键菜单,你可以略过这一段。如果你想要添加数个自用菜单,最好可以通过做好清晰的标注或像上面的例子那样创建一个完全独立的右键菜单,以便能把它们识别出来。
listing 1, #2:在右键菜单中列举的条目里, 用户的每条输入都从0开始依次排序。因此,第一个用户输入的变量为#0#,第二个是#1#,以此类推。listing 1第二段中的代码控制着第一段代码。在本例中,用户能输入的值只有:cascade constraints。
在本例中,通过一个被标注为cascade constraints的复选框
listing 1, #3:listing 1, #3,是所执行的sql脚本,同时也显示于对话框的sql选项卡中。
当你调用菜单时,右键菜单能知道当前的数据库连接和所选的表格。这些信息存储于变量#object_owner#和变量#object_name#之中。#0#的值将由listing 1, #2中的代码所创建的cascade constraints复选框赋予。
代码选项
你可以控制oracle sql developer采用不同的方式对用户的输入进行扩展。你可以允许用户仅仅输入数值。如果你要提供一个新的数值或串,例如为表格起一个新名字,这将很有必要。为此,我们需要创建一个选项卡和空白域,输入以下内容:
<prompt> <label>new table name</label> </prompt> |
你也可以创建一个静态的或是动态的目录。下面是一个静态目录的案例:
<prompt>
<label>logging:</label>
<value><![cdata[static:logging:nologging]]>
</value>
接下来,利用droptable.xml例子创建的的块,注意以下的sql:
<sql> <![cdata[create table "#0#".#1# as select * from "#object_owner#"."#object_name#" where '1' = '#2#']]> </sql> |
你能确定右键菜单将会执行什么,以及输入值将会是怎样的么?
和前面一样,连接(#object_owner#)和该表(#object_name#)是由调用的右键菜单驱动的。注意这个查询将由三个输入值:0、1和2。想查看驱动该查询的右键菜单对话框,在oracle sql developer中打开一个连接(如hr),展开tables节点。选择一个表格,如department。点击右键,并选择table -> copy来调用对话框,
新的表所有者――变量#0#,由一个受动态查询驱动的list控制。
<prompt> <label>new table owner</label> <default> <![cdata[select user from dual]]> </default> <value> <![cdata[select distinct username from sys.all_users order by 1]]> </value> </prompt> |
变量#1#是一个输入栏,用来输入新的表名;变量#2#是一个复选框,用来选择所包含的数据。
添加新选项卡
在oracle sql developer中选择一个连接,如hr,展开tables节点,并选择employees。根据你设置的参数,单击或双击以打开一系列描述对象属性的选项卡。选项卡的内容依据所选的对象和所连接的数据库版本而异。
你可以为选定的对象添加额外的选项卡以显示更多信息。而你要知道的只是这些添加的信息保存在哪个数据字典视图中。要为表定义添加一个额外的选项卡以显示列注释,先建立一个名为colcomm.xml的文件,并输入listing 2中的代码。
代码listing 2: colcomm.xml的代码
<items> <item type="editor" node="tablenode" vertical="true"> <title><![cdata[column comments]]></title> <query> <sql><![cdata[select * from all_col_comments where owner = :object_owner and table_name = :object_name]]> </sql> </query> </item> </items> |
以同样的方式,你可以添加之前的扩展,选择tools -> preferences,展开database节点,并选择user defined extensions。添加新的用户自定义扩展,但这次用户自定义扩展的类型是editor。设置colcomm.xml文件的路径。关闭并重新启动oracle sql developer以激活这个新的扩展。
打开一个数据库连接(如hr),展开tables节点。选择locations表,并选择新的column comments选项卡,即可看到所有已存注释的清单。
总论
oracle sql developer能够帮助你输出报表并与你的团队共享,添加自定义的右键菜单,为显示对象增添额外的信息选项卡或是提供更为复杂的向导驱动实用程序。你只需使用sql和简单的xml脚本,甚至完全无需编写代码,即可轻松的扩展oracle sql developer。
it专家网原创文章,未经许可,严禁转载!