我正在使用SQL Developer管理Oracle数据库。我的项目很旧,从头开始创建数据库的文件丢失了,所以我使用了SQL Developer的"数据库导出"工具来提取数据库的文件。我还在某些表中使用了一些自定义类型,以便将矢量数据保存在某些列中。
现在,我注意到在SQL Developer生成的sql文件中,创建自定义类型的命令是:
CREATE OR REPLACE EDITIONABLE TYPE "MY_TYPE" AS TABLE OF NUMBER;
而从该SQL文件恢复数据库后,SQL Developer中该类型的"代码"字段为:
create or replace TYPE "MY_TYPE" AS TABLE OF NUMBER;
首先,为什么所有这些格式错误(空格和小写字母)都存在?为什么EDITIONABLE
关键字消失了?
我目前也在为这种类型添加文档,我应该使用第一个版本还是第二个版本来添加注解?
1条答案
按热度按时间ilmyapht1#
有两件事在起作用,其中一个你通常不会看到。
例如,考虑一张table。您的脚本可能是:
但是如果你从数据库中请求该表的 *,你会得到这样的结果:
还有更多的东西,因为数据库是从存储在数据库中的属性中构建的。它给出了 * 完整的 * 定义,包括所有的默认子句等。
当然,除非您保存了 * 您的 * 原始脚本,否则您会简单地认为来自数据库的数据库 * 就是 * 脚本。
使用TYPE(或任何PL/SQL代码),与上面的TABLE示例不同,数据库确实保存了原始代码(因为它是源代码)。
所以当我做类似这样的事情时:
你输入的文本被保存了下来我们可以在这里看到:
因此,现在(与表不同)我们有两个选项来为您的类型对象提供参数。
我们可以从头开始 * 构建 * 这个函数,就像我们对上表所做的那样:
或者我们可以从USER_SOURCE中抓取你的代码,并在前面加上“create or replace”:
因此,你看到的两个结果。
您可以争辩说DBMS_METADATA的“完整”配置是“最”正确的,但这实际上是一个主观的争论,而不是铁一般的争论。