代码之家  ›  专栏  ›  技术社区  ›  TSmith

使用alter_type重命名类型属性

  •  0
  • TSmith  · 技术社区  · 5 年前

    我正在尝试重命名我创建的类型中的属性。。。据我所知。。。使用“改变类型”是正确的路线。。。

    这是因为有一个表类型使用了该对象,删除然后重新添加会破坏与该类型相关联的许多权限。。。

    我试过几件事,但都找不到可靠的解决办法。。。

    这是我的类型:

    CREATE OR REPLACE TYPE FOO_BAR AS OBJECT
    (
       BAR_ID        NUMBER(14)
    )
    

    我想把它改成

    CREATE OR REPLACE TYPE FOO_BAR AS OBJECT
    (
       FOO_ID        NUMBER(14)
    )
    

    我尝试过以下代码:

    ALTER TYPE FOO_BAR 
    MODIFY ATTRIBUTE BAR_ID rename FOO_ID;
    

    任何帮助都将不胜感激!

    1 回复  |  直到 5 年前
        1
  •  1
  •   Ankit Bajpai    5 年前

    据我所知,在oracle中没有这种重命名类型对象的方法,我想知道是否有任何可能的方法。你需要做的是在破碎的部分。首先删除有问题的属性-

    ALTER TYPE FOO_BAR 
    DROP ATTRIBUTE BAR_ID;
    

    然后尝试添加具有所需名称的新对象-

    ALTER TYPE FOO_BAR 
    ADD ATTRIBUTE FOO_ID NUMBER;
    
        2
  •  2
  •   Alex Poole    5 年前

    不能直接重命名属性。 There is no syntax that supports it. 我目前能看到的实现这一点的唯一方法是,假设您在类型之上构建了一个表,那么修改@AnkitBajpai的建议,更改操作顺序并添加一个更新步骤:

    ALTER TYPE FOO_BAR ADD ATTRIBUTE FOO_ID NUMBER(14) CASCADE;
    
    UPDATE FOO_BAR_TAB SET FOO_ID = BAR_ID;
    
    ALTER TYPE FOO_BAR DROP ATTRIBUTE BAR_ID CASCADE;
    

    db<>fiddle demo

    显然有点痛苦。。。

        3
  •  0
  •   TSmith    5 年前

    在与更多的人交谈并做了更多的研究之后,似乎只需删除表和对象类型,然后重新创建它们将是最好的解决方案。

    不幸的是,没有一种更简单的方法来重命名属性。因为它是为自动部署而设置的,所以添加权限非常困难。

    谢谢大家的回答。