代码之家  ›  专栏  ›  技术社区  ›  Europa

Oracle将表重命名为临时表,创建新表,然后将数据从临时表移动到新表

  •  0
  • Europa  · 技术社区  · 6 年前

    我有一张桌子叫 消息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)
    );
    

    现在我想从旧的消息中提取所有内容并将其插入到新的表中,但是我需要将一些东西放入我的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;
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Kaushik Nayak    6 年前

    您使用的Insert语句不正确。

    应该是

    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;
    

    另外,将“DATE”列更改为其他有意义的内容,因为它是一个保留关键字。