【问题标题】:Copying the data from the old table to the new table with only different new table has sequence将旧表中的数据复制到新表中,只有不同的新表有顺序
【发布时间】:2019-01-11 18:55:26
【问题描述】:

我需要从旧表创建一个新表,需要从旧表中插入行,唯一的变化是需要在新表中添加新的序列列。 有人可以帮助我吗?

INSERT INTO dps_session_map (TrackSESSION_SEQ,session_seq, column3)
   SELECT
        A.SEQ_Session.NEXTVAL, sm.session_seq, sm.column3
    FROM 
        dps_session_map  A,

        dps_exec_session_map sm
WHERE   sm.session_seq is not null; 

【问题讨论】:

  • 你还没有说什么是行不通的。你得到什么错误?
  • 什么版本的Oracle?最近的版本允许创建一个自动递增的序列列。为您的版本添加标签,如 Oracle12c、Oracle11g 等。

标签: oracle sequence


【解决方案1】:

删除 VALUES 关键字及其括号:

--general pattern of inserting from one table to another existing table 
INSERT INTO table(columns)
SELECT columns FROM othertable

列数和类型必须匹配(或可隐式转换)

如果您的新表不存在,请执行以下操作:

CREATE TABLE x AS
(SELECT columns FROM othertable)

【讨论】:

  • 新表中还有序列列需要添加
  • 我不太明白你在说什么。如果您的新表有一个从序列或其他默认值中获取值的列,请将其排除在插入的列列表之外
  • 让我改写一下查询语句.. 我需要从旧表中取出所有列并创建一个包含更多列序列列的新表
  • 如果目标表不存在,使用create table xyz as (select...)
  • 为什么将序列寻址为 A.SEQ_Session.NEXTVAL?通过它的模式和名称引用序列。该序列不属于某个表。
【解决方案2】:
INSERT INTO dps_session_map (TrackSESSION_SEQ,session_seq, column3)
   SELECT
        **SCHEMA.**SEQ_Session.NEXTVAL, sm.session_seq, sm.column3
    FROM 
        dps_session_map  A,
        dps_exec_session_map sm
WHERE   sm.session_seq is not null; 

通过名称或完全限定的 schema.name 引用序列。序列不属于表。您是否收到“ORA-02289:序列不存在”错误?

【讨论】:

  • ORA-02287: sequence number not allowed here 02287. 00000 - "sequence number not allowed here" *原因:指定的序号(CURRVAL 或 NEXTVAL)在语句中不合适。 *操作:删除序列号。
  • 我尝试了你提到的方法并克服了错误
  • dps_session_map 是表还是视图?
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多