一个问题
数据库:甲骨文
这是stmt(描述:将类型VARCHAR更改为CLOB)
ALTER TABLE XX
ADD (TEMP_Value CLOB);
UPDATE XX SET TEMP_Value=Value;
COMMIT;
ALTER TABLE XX DROP COLUMN Value;
ALTER TABLE XX
RENAME COLUMN TEMP_Value TO Value;
问题:新的 clob 列是 XX 表中的最后一列(通常)。如果值秒现在是最后一列,如何更改序列
我知道以下解决方案,这对于几列来说不是很聪明,所以我想找到另一种解决方案。
create newtable as
select Value, X, XX,..
drop table XX;
rename newtable to XX;
在这里讨论
Oracle 不支持在表中间添加列,仅将它们添加到末尾,这与MYSQL
ALTER TABLE TABLENAME ADD COL1 AFTER COL2
命令不同。数据库设计和应用功能不应依赖于数据库架构中列的顺序。毕竟,您始终可以在 select 语句中指定顺序,这是最佳实践。
SELECT * FROM TABLE
不是一个好的做法。
但是,如果由于某种原因,您只需要在表中间有一个新列,则可以解决此问题。
CREATE TABLE TAB1NEW
AS
SELECT
0 AS COL1,
COL1 AS COL2
FROM
TAB1;
DROP TABLE TAB1 PURGE;
RENAME TAB1NEW TO TAB1;
其中 SELECT 0 AS col1 是新列,然后根据需要从原始表中指定其他列。将 SELECT 0 AS col1 按所需顺序放在适当的位置。
之后,您可能希望对列运行 alter table 语句,以确保它是您想要的数据类型。记得放回你的约束、索引、分区...以及原始表格中的任何内容