oracle存储过程中查询动态表名

有34个表,每个表的表名格式为aa***bb,其中***是六位数字,从别的表中可以查到。现在想写个存储过程,目的就是想从这34个表中分别查询出来其中的两个字段的值,然后插... 有34个表,每个表的表名格式为aa***bb ,其中***是六位数字,从别的表中可以查到。
现在想写个存储过程,目的就是想从这34个表中分别查询出来其中的两个字段的值,然后插入到别的表中。
展开
 我来答
badkano
推荐于2017-12-15 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885365
团长

向TA提问 私信TA
展开全部

先建立结果表,也就是存放你最终结果的表

 create table test
(a varchar2(100),
b varchar2(100));

然后建立存储过程

create procedure p_insert
as
cursor cur_tbname is 
select 'insert into test select col1,col2 from '||table_name 
from user_tables where table_name like 'AA____BB';--这个位置的表名必须大写的A和B,col1和col2换成你实际的字段名称
begin
 open cur_tbname;
      loop
 fetch cur_tbname into v_sql;
 exit when cur_tbname%notfound;
        execute immediate v_sql;
 commit;
      end loop;
end;

 

我最终没测试,你自己测试一下,看哪有问题吧

更多追问追答
追问
我从别的表中查询到***在哪儿执行的? 怎么组装成一个新表名的呢?
追答

你从

user_tables 里查不到你的那些表名吗?

 

你把这句单独运行一下

select 'insert into test select col1,col2 from '||table_name 
from user_tables where table_name like 'AA____BB';
col1和col2给换一下
万山数据
2024-11-14 广告
数据仓库处理是北京万山数据科技有限公司的核心业务之一。我们专注于高效、安全地处理大规模数据,通过先进的数据仓库技术,实现数据的集成、存储、管理和分析。我们的数据仓库解决方案能够支持复杂的数据查询和分析需求,提供实时的数据洞察,助力企业做出更... 点击进入详情页
本回答由万山数据提供
翔阿狗
2013-11-01 · TA获得超过208个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:199万
展开全部
EXECUTE IMMEDIATE sql_test;
sql_test为动态拼接的字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
王者165
2013-11-01 · TA获得超过138个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:55.4万
展开全部
你没描述清楚:从34个表中分别查询出来其中的两个字段的值?什么意思,你一次查询34个表?
更多追问追答
追问
执行34次查询,查询出来34组数据
追答
可是你所有表里面的字段名称都是一样的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式