oracle中如何改变列的数据类型
How to change the data type of column in oracle
我有一个 master table.It 包含 1300000 records.I 想将列类型从 VARCHAR(100 CHAR) 更改为 VARCHAR2(300 CHAR)。
我计划了一个方法来做到这一点。我将创建一个具有新名称的新列,然后将数据从旧列复制到新列,然后我将删除旧列并使用旧列名称重命名新列。
但是 master table 包含一个触发器。它将数据添加到 master_history table 以进行更新和删除过程。那么,触发器将如何影响我的方式?如果我做上面的处理,可以吗?
我的触发器是:
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 列的宽度:
ALTER TABLE master_history MODIFY mycol VARCHAR2(300);
--^-- modify this to your real column name
扩展列宽不会影响现有数据。
我有一个 master table.It 包含 1300000 records.I 想将列类型从 VARCHAR(100 CHAR) 更改为 VARCHAR2(300 CHAR)。
我计划了一个方法来做到这一点。我将创建一个具有新名称的新列,然后将数据从旧列复制到新列,然后我将删除旧列并使用旧列名称重命名新列。
但是 master table 包含一个触发器。它将数据添加到 master_history table 以进行更新和删除过程。那么,触发器将如何影响我的方式?如果我做上面的处理,可以吗?
我的触发器是:
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 列的宽度:
ALTER TABLE master_history MODIFY mycol VARCHAR2(300);
--^-- modify this to your real column name
扩展列宽不会影响现有数据。