Sql 插入所选表中已知记录值的所有记录

Sql 插入所选表中已知记录值的所有记录,sql,oracle,select,Sql,Oracle,Select,您好,我想知道如何将所选表中的记录插入到specyfic表中,使其具有相同的列模型。这是一种仅从一个表插入的方法 insert into shema2.MAILING_PERSON_LOG_TAB select * from shema1.mailing_person_log_201008 t where t.object_type = 'active' 然后我可以选择表名。有人能帮我一个忙吗?如何使用select或procedure从所有表格中进行操作 select t.T

您好,我想知道如何将所选表中的记录插入到specyfic表中,使其具有相同的列模型。这是一种仅从一个表插入的方法

insert  into  shema2.MAILING_PERSON_LOG_TAB
select  *  from  shema1.mailing_person_log_201008  t
where  t.object_type  =  'active'
然后我可以选择表名。有人能帮我一个忙吗?如何使用select或procedure从所有表格中进行操作

select t.TABLE_NAME FROM all_tables t WHERE t.table_name LIKE 'MAILING_PERSON_LOG%'

将insert语句构建为命令字符串并动态执行,例如(用于说明的代码,根据您的要求进行调整):


注意:如果表包含长字段,则此操作无效

开发人员遇到了一个错误:来自Tablet映射,我想知道应该在哪里声明dest。表shema2.MAILING\u PERSON\u LOG\u TABI假设您将源表和目标表的名称存储在名为
tablemapping
的表中。正如我在上面所写的:根据您的需要调整此代码。正如您自己所见,在添加数据时添加表是一个坏主意。这不是数据库应该如何工作的。应该只有一个表
mailing\u person\u log
,其中包含月份(或日期)的列,因此您只需在该表中添加新数据的行。这样,就不存在如何编写查询来选择一个月以上的数据的问题。因此,我的建议是:更改数据模型。
declare
  l_to_tablename varchar2(100);
begin
  -- loop over tables to copy
  for l_rec in (select t.TABLE_NAME
                  FROM all_tables t
                 WHERE t.table_name LIKE 'MAILING_PERSON_LOG%') loop

    -- determine to_tablename from somewhere
    select to_tablename
      into l_to_tablename
      from tablemapping t
     where t.table_name = l_rec.table_name;

    execute immediate 'insert  into  shema2.' || l_to_tablename ||
                      ' select  *  from  shema1.' || l_rec.table_name ||
                      ' t where  t.object_type  =  ''active''';

  end loop;
end;