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表語句重新命名資料庫中的表。