【问题标题】:Can I drop/add attribute without consequences? Oracle Object Type我可以在没有后果的情况下删除/添加属性吗? Oracle 对象类型
【发布时间】:2012-08-27 12:52:00
【问题描述】:

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

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

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

【问题讨论】:

  • 我们是否得到了这个问题的结论性答案?

标签: oracle plsql object-type


【解决方案1】:

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

ALTER TYPE CUSTOMER MODIFY ATTRIBUTE name VARCHAR2(50);

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

【讨论】:

  • 是的,有。 PLS-00719:只允许扩大属性“字符串”约束。
猜你喜欢
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
相关资源
最近更新 更多