2012-08-27 93 views
3

我有一個OBJECT_TYPEATTRIBUTE varchar2(200)。還有很多其他的對象引用這個。我需要將屬性的長度縮短爲varchar2(50)。我知道我不能直接做,所以我覺得是這樣的:我可以放棄/添加屬性嗎? Oracle對象類型

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

的問題是:有任何可能的屬性下探/創建之後被打破?在DROP聲明中使用INVALIDATE選項而不是CASCADE是否正確?我不想放棄任何東西 - 關係或數據。

+0

我們得到這個問題的任何結論的答案? –

回答

0

是否有下面的未使用的一個原因:

ALTER TYPE CUSTOMER MODIFY ATTRIBUTE name VARCHAR2(50); 

我已使用類型和滴尤其是如果有使用類型定義表和數據的屬性時碰到兼容性的問題。這是我避免基於數據類型的表和視圖的原因之一。長度的變化會使表和相關數據超過50的任何行無效。如果其他對象只是類型,並且不在視圖和表中使用,那麼上述的alter type應該可以正常工作。你可能需要重新編譯任何類型。請記住,該類型的限制性越來越大,並且可能會影響相關數據。

+1

是的,有。 PLS-00719:只允許擴展屬性「字符串」約束。 – karel

相關問題