【发布时间】:2020-07-27 18:34:06
【问题描述】:
我有一个主表。它包含 1300000 条记录。我想将列类型从 VARCHAR(100 CHAR) 更改为 VARCHAR2(300 CHAR)。
我计划了一种方法来做到这一点。我将创建一个具有新名称的新列,然后将数据从旧列复制到新列,然后我将删除旧列并用旧列名重命名新列。
但是主表包含一个触发器。它将数据添加到 master_history 表以进行更新和删除过程。那么,触发器将如何影响我的方式?如果我做上面的处理,可以吗?
我的触发器是:
ALTER TRIGGER "TRG_MASTER_" ENABLE;
CREATE OR REPLACE TRIGGER "MASTER" AFTER
UPDATE OR
DELETE ON MASTER FOR EACH ROW
BEGIN
INSERT
INTO MASTER_HISTORY
(
ORDER_ID,
CUSTOMER_FIRST_NAME,
CUSTOMER_LAST_NAME,
CUSTOMER_EMAIL,
CUSTOMER_ADRESS
)
VALUES
(
:OLD.ORDER_ID,
:OLD.CUSTOMER_FIRST_NAME,
:OLD.CUSTOMER_LAST_NAME,
:OLD.CUSTOMER_EMAIL,
:OLD.CUSTOMER_ADDRESS,
);
END;
【问题讨论】:
-
Oracle 在内部将
VARCHAR和VARCHAR2视为相同,但是Oracle 推荐使用VARCHAR2。即使您将其创建为 VARCHAR,您也可以描述该表并看到 Oracle 会将其视为 VARCHAR2。 -
牢记其他 cmets,但仅解决您对触发器的担忧 - 如果归结为它,只需在转换操作期间禁用触发器,然后重新启用它。
标签: sql string oracle ddl database-trigger