Oracle重命名表

在本教學中,您將學習如何使用Oracle RENAME語句重命名資料庫中的表。

要重命名表,可以使用以下Oracle RENAME表語句,如下所示:

RENAME table_name TO new_name;

RENAME表語句中:

  • 首先,指定將要重命名的表名稱。
  • 其次,指定新的表名。新名稱不能與同一模式中的另一個表相同。

請注意,一旦執行了RENAME語句,就不能回滾了。

當重命名表時,Oracle自動將舊表上的索引,約束和授權轉移到新表上。 另外,它使依賴重命名表(原表)的所有對象失效,如視圖,存儲過程,函數和同義詞。

Oracle RENAME表的例子

我們來創建一個名為promotions表,用來作演示。

CREATE TABLE promotions(
    promotion_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    promotion_name varchar2(255),
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    PRIMARY KEY(promotion_id),
    CHECK (end_date > start_date)
);

以下PL/SQL函數通過查詢promotions表中的數據來返回促銷的數量:

CREATE OR REPLACE FUNCTION count_promotions
  RETURN NUMBER
IS
  v_count NUMBER;
BEGIN
  SELECT
    COUNT( * )
  INTO
    v_count
  FROM
    promotions;
  RETURN v_count;
END;

要將promotions表重命名為campaigns表,可以使用以下語句:

RENAME promotions TO campaigns;

如上面所述,Oracle將promotions表中的所有索引,約束和授權轉移到campaigns表中。 以下語句顯示了從promotions表傳輸的新campaigns表的限制條件:

SELECT
    OBJECT_TYPE,OBJECT_NAME,status
FROM
    all_objects
WHERE
    status = 'INVALID' and OWNER='OT' ;

因為COUNT_PROMOTIONS函數引用了promotions表,所以當重命名promotions表時,COUNT_PROMOTIONS函數變得無效。

要查找當前模式中的無效對象,可以從all_objects視圖中查詢數據,如下所示:

SELECT
    owner,
    object_type,
    object_name
FROM
    all_objects
WHERE
    status = 'INVALID'
ORDER BY
    object_type,
    object_name;

執行上面查詢語句,得到以下結果 -

如上查詢結果所示,該語句返回COUNT_PROMOTIONS函數作為無效的對象。

在本教學中,您已學習如何使用Oracle RENAME表語句重命名資料庫中的表。


上一篇: Oracle截斷表 下一篇: Oracle Number類型