用于开发数据库对象类型和对象表的对象模型为 Oracle 数据库带来了面向对象的数据存储。 我们讨论了创建对象类型,该类型由对象规范和对象主体组成。 然后,我们从对象类型创建了一个对象表。 在本文中,我们将讨论更改对象类型以及怎么从数据库中删除对象类型。
为什么要更改或删除数据库对象?
如果组织的数据需求发生变化,则可能需要修改数据库对象。删除数据库对象本质上会删除它,而更改数据库对象则允许DBA和开发人员添加或删除成员属性和方法。作为更改数据库对象的结果,它会更改类型的规范。
Oracle数据库提供ALTER TYPE语句来更改数据库对象类型。请注意,当对象类型的规范更改时,必须重新编译它。如果更新了对象类型的主体,则还必须重新编译该类型的主体。
我们将讨论如何处理这两种情况。
如何更改数据库对象
首先,将名为edition的属性添加到我们在第一篇文章中创建的对象类型catalog_type中。ADD ATTRIBUTE子句用于添加属性。新属性必须是唯一的,因为它的名称不能与现有属性相同,甚至不能与方法名称相同。新属性将添加到属性列表的末尾。如果存在任何从属数据库对象类型和对象表,则可以使用CASCADE子句将对对象类型的更改传播到这些从属对象类型和表。由于我们确实有一个依赖对象表,我们将使用下面的ALTER TYPE语句添加一个属性。
更改类型CATALOG_TYPE
添加属性(edition VARCHAR2(20)) CASCADE;
将ALTER TYPE语句复制到Quest®Toad®for Oracle的编辑器中,然后单击Execute Script,如图1所示。
如图2所示的Output选项卡输出所示,对象被更改。
在Schema Browser中,新属性EDITION如图3所示。Schema浏览器可能需要刷新,例如关闭并重新打开。
数据库对象类型的主体不能用ALTER type语句更改,应该单独更改,我们将在下面讨论。在模式浏览器中,右键单击CATALOG_TYPE类型并选择编辑器,如图4所示。
在get_details过程中,在DBMS_OUTPUT中添加edition属性。PUT_LINE语句,如图5所示。单击ExecuteScript运行修改后的脚本。
如输出(图6)所示,对象类型的主体发生了变化。
我们修改了数据库对象类型的规范和主体。要验证新类型和主体是什么,请在模式浏览器中选择相应的选项卡。Spec选项卡(图7)显示了更改后的规范。ALTER TYPE语句已添加到规范中,原始的CREATE TYPE声明不会直接更改。
对象类型的主体显示在body选项卡中(图8)。
更改数据库对象类型的规范和正文后,使用带有compile子句的ALTER type语句再次编译规范和正文。以下语句编译catalog_type类型的规范。
ALTER TYPE catalog_TYPE编译器规范;
以下语句编译catalog_type主体的主体。
ALTER TYPE catalog_TYPE编译器主体;
如果只需要再次编译规范或正文,则前面的语句很有用。因为我们修改了规范和正文,所以我们可以使用以下语句来编译规范和正文。
ALTER TYPE catalog_TYPE编译器;
将语句复制到Toad for Oracle中的编辑器中,然后单击Execute Script(图9)。
我们没有考虑数据库对象类型catalog_type具有依赖对象表。为了能够使用COMPILE选项更改类型,该类型不能有任何依赖类型或对象表。生成ORA-02311错误,如图10所示。
输出选项卡中也会输出ORA-02311错误。
我们需要删除对象表才能编译更改后的对象类型。在SchemaBrowser中选择Tables,右键单击CATALOG_TYPE_T对象表并选择Drop(图11)。
在“确认放置表格”对话框中单击“确定”。
对象表将被删除,如模式浏览器中未列出表所示。再次运行带有COMPILE选项的ALTER TYPE语句。
对象类型会根据“输出”选项卡中的消息进行更改。
更改后的对象类型CATALOG_type中的属性和方法列在“模式浏览器”的“属性和方法”选项卡中(图12)。
如何从新的数据库对象类型创建对象表
因为我们删除了与对象类型关联的对象表,所以我们应该重新创建它。右键单击模式浏览器中的CATALOG_TYPE对象类型,然后选择Create>ObjectTable(图13)。
Click on OK in the Information dialog that is displayed. An object table CATALOG_TYPE_T gets created as shown in Schema Browser (Figure 14).
与更改对象类型之前相比,对象表有一个名为EDITION的附加列(图15)。
对象表最初没有数据,如SchemaBrowser中的data选项卡(图16)所示。
下面的PL/SQL脚本将数据添加到对象表中,还查询该表以获取并列出添加的数据。
catalog CATALOG_TYPE;
BEGIN
INSERT INTO CATALOG_TYPE_T VALUES (CATALOG_TYPE(1, 'Oracle Magazine', 'Oracle Publishing','Jan/Feb 2021'));
INSERT INTO CATALOG_TYPE_T VALUES (CATALOG_TYPE(2, 'Java Magazine', 'Oracle Publishing','Jan/Feb 2021'));
SELECT VALUE(c) INTO catalog FROM CATALOG_TYPE_T c WHERE c.id = 2;
catalog.get_details();
END;
将脚本复制到编辑器,然后单击执行脚本。PL/SQL过程如输出所示(图17)。
DBMS输出选项卡(图18)显示了PL/SQL脚本中的Select语句的输出。
如何删除数据库对象
要删除对象类型,请右键单击模式浏览器中的对象类型,然后选择图19中的catalog_type对象类型所示。
确认的Drop类型对话框提示是否应使用强制选项删除对象类型。如果使用了强制选项,则任何因类型和表格也会被删除。选择不要使用强制选项(图20),然后单击确定。
错误消息对话框(图21)显示ORA-02303错误,表明无法删除具有依赖关系的类型。
要删除对象表,请在“模式浏览器”中的CATALOG_TYPE_T表上单击鼠标右键,然后选择“删除”。
在Confirm Drop Table提示符中单击OK。删除依赖对象表后,如果不存在其他依赖项,则可以删除对象类型。在模式浏览器中的对象类型CATALOG_type上单击鼠标右键,然后再次选择“拖放”。
将显示“确认放置类型”对话框。再次选择Do Not Use Force Option并单击OK(参见图24)。对象类型CATALOG_type被删除,并且不会在Schema Browser>Types中列出(图22)。
在这篇文章中,我们讨论了创建对象类型,从对象类型创建对象表,更改对象类型并将对象类型删除 - 所有to toad for toad for Oracle for Oracle Pro带有DB Admin模块。oracle的DBA版本已预装DB管理模块。
上一条:怎么在 Toad for Oracle Pro DB Admin 中安排批处理作业
下一条:使用 Toad 生成 SQL 查询的提示