一个问题
数据库:Oracle
这是stmt(描述:chnage type VARCHAR to 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-column是XX表中的最后一列(通常)。
如果第二个值现在是最后一列,如何更改序列
答案 0 :(得分:0)
我知道以下解决方案,并且对于几个列而言不是很聪明,所以我想找到另一个解决方案。
create newtable as
select Value, X, XX,..
drop table XX;
rename newtable to XX;
答案 1 :(得分:0)
讨论here
与MYSQL
ALTER TABLE TABLENAME ADD COL1 AFTER COL2
命令不同,Oracle不支持在表的中间添加列,只将它们添加到结尾。您的数据库设计和应用程序功能不应该依赖于数据库模式中的列顺序。毕竟,您总是可以在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语句,以确保它是您想要的数据类型。记得放回你的约束,索引,分区......以及原始表中的任何内容