首页 > 解决方案 > Oracle 将表重命名为临时表,创建新表,然后将数据从临时表移动到新表

问题描述

我有一个名为MESSAGE_ID的表:

MESSAGE_ID VARCHAR2(36 BYTE) PRIMARY KEY
DATE TIMESTAMP(6)
STATUS VARCHAR2(200 BYTE)

我想创建一个新表来添加一个应该是主键的新字段。

alter table MESSAGE_ID rename to MESSAGE_ID_OLD;


CREATE TABLE MESSAGE_ID
(
    MY_ID NUMBER NOT NULL,
    MESSAGE_ID VARCHAR2(36) NOT NULL,
    DATE TIMESTAMP,
    STATUS  VARCHAR2(200),
    PRIMARY KEY(MY_ID)
);

现在我想从 MESSAGE_ID_OLD 中取出所有内容并将其插入新表中,但是我需要将一些东西放入 MY_ID、一些随机数或其他东西中。

这就是我所拥有的,但它给了我错误:

INSERT INTO MESSAGE_ID (MY_ID, MESSAGE_ID, DATE, STATUS)
(SELECT MY_SEQUENCE.nextval from dual), (SELECT MESSAGE_ID, DATE, STATUS FROM MESSAGE_ID_OLD));

然后我想删除旧表:

DROP TABLE MESSAGE_ID_OLD;

标签: oracle

解决方案


您使用的插入语句不正确。

它应该是

INSERT INTO MESSAGE_ID (
    MY_ID
    ,MESSAGE_ID
    ,DATE_t
    ,STATUS
    )
SELECT MY_SEQUENCE.nextval AS my_id
    ,MESSAGE_ID
    ,DATE_t
    ,STATUS
FROM MESSAGE_ID_OLD;

此外,将“日期”列更改为其他有意义的内容,因为它是保留关键字。


推荐阅读