3

我有一个OBJECT_TYPEwith ATTRIBUTE varchar2(200)。还有许多其他对象引用这个对象。我需要将属性的长度减少到varchar2(50). 我知道我不能直接这样做,所以我找到了这种方式:

ALTER TYPE CUSTOMER DROP ATTRIBUTE name INVALIDATE;
ALTER TYPE CUSTOMER ADD ATTRIBUTE name varchar2(50) CASCADE;

问题是:在删除/创建属性后有什么可以破坏的吗?使用INVALIDATE选项而不是CASCADEDROP语句中是否正确?我不想丢失任何东西——关系或数据。

4

1 回答 1

0

是否有理由不使用以下内容:

ALTER TYPE CUSTOMER MODIFY ATTRIBUTE name VARCHAR2(50);

我在使用类型和删除属性时遇到了兼容性问题,尤其是在使用类型定义的表和数据时。这是我避免基于数据类型的表和视图的原因之一。长度的更改将使表和关联数据超过 50 的任何行无效。如果其他对象只是类型并且未在视图和表中使用,那么上面的 alter type 应该可以正常工作。您可能需要重新编译任何类型。请记住,类型变得越来越严格,以及它如何影响任何相关数据。

于 2013-02-24T18:01:37.210 回答