【问题标题】:Oracle: Rename/replace object type and its referencesOracle:重命名/替换对象类型及其引用
【发布时间】:2018-06-21 19:58:49
【问题描述】:

我创建了一个如下的对象类型,并在多个存储过程和表中作为列使用。

CREATE OR REPLACE TYPE SS_EMP_TP FORCE AS OBJECT (
    NAME VARCHAR2(30),
    AGE NUMBER
);
/
CREATE OR REPLACE TYPE SS_EMP_TAB_TP AS TABLE OF SS_EMP_TP;
/

例子:

ALTER TABLE EMP_S ADD (EMP_DETAIL_TABLE **SS_EMP_TAB_TP**)  
      NESTED TABLE EMP_DETAIL_TABLE STORE AS  NESTED_EMP_DETAIL_TABLE RETURN AS LOCATOR;

现在我必须将对象类型从 SS_EMP_TP、SS_EMP_TAB_TP 分别重命名为 EMP_TP、EMP_TAB_TP。 并且还必须替换所有被引用的地方。

是否有 rename alter object type 语句?

我该怎么做?在此过程中我需要考虑哪些事项?

【问题讨论】:

    标签: oracle plsql alter


    【解决方案1】:

    我建议你不要这样做。你为什么要?有什么区别(除了SS_)?您期望得到什么好处?

    无论如何:将SS_EMP_TP 重命名为EMP_TP。引用SS_EMP_TP 的所有内容都将失效。然后修改每个无效对象以修复它。重复。

    再一次 - 不要,除非你有很好的理由。

    【讨论】:

    • 谢谢@@LittleFoot,SS_ 只不过是源系统的名称。所以希望有一种类型,而不是为不同的系统提供多种类型。有renamealter object type 语句吗?
    • 您仍然可以拥有它而无需更改任何内容。没错,如果没有那个“SS_”前缀(我猜是 SCOTT_ 或 PLUSZARA_ 或类似的东西),它会看起来 更漂亮,但是 - 就可用性而言 - 它只会工作美好的。如果您坚持,请创建一个同义词 (create synonym emp_tp for ss_emp_tp;) 并使用它来代替“原始”类型名称。
    • 我不确定您是否建议 OP 使用 Oracle's RENAME command - 如果是,那仅适用于表、视图、序列和私有同义词。尝试“重命名”类型将失败,并出现“ORA-03001 - 未实现的功能”异常。
    • @@Bob,我可以尝试creating synonym 的建议,但仍然想知道如何为对象类型提供rename 语句。你有什么建议吗?
    • @1pluszara:您不能对对象类型使用 RENAME 命令 - 不支持这样做,并且不会工作。如果您不想使用同义词,据我所知,您唯一的选择是使用新名称创建一个新类型,然后遍历整个数据库,用对旧类型的引用替换对旧类型的引用新类型 - 然后删除旧类型。祝你好运。
    猜你喜欢
    • 2014-09-24
    • 1970-01-01
    • 2020-04-19
    • 2015-07-31
    • 2015-02-28
    • 2023-03-29
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多