Sql 插入所选表中已知记录值的所有记录
您好,我想知道如何将所选表中的记录插入到specyfic表中,使其具有相同的列模型。这是一种仅从一个表插入的方法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
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;