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

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

向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给换一下
北京智动益企
2025-03-10 广告
北京智动益企网络科技有限公司成立于2023年位于北京市房山区,公司致力于网络应用工具和自动化软件开发,帮助办公人员减小劳动强度提高工作效率,为互联网公司降本增效。 IP批量查询工具网是北京智动益企网络科技有限公司开发的一个IP批量统计与筛选... 点击进入详情页
本回答由北京智动益企提供
翔阿狗
2013-11-01 · TA获得超过208个赞
知道小有建树答主
回答量:452
采纳率:0%
帮助的人:204万
展开全部
EXECUTE IMMEDIATE sql_test;
sql_test为动态拼接的字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
王者165
2013-11-01 · TA获得超过138个赞
知道小有建树答主
回答量:256
采纳率:0%
帮助的人:57.7万
展开全部
你没描述清楚:从34个表中分别查询出来其中的两个字段的值?什么意思,你一次查询34个表?
更多追问追答
追问
执行34次查询,查询出来34组数据
追答
可是你所有表里面的字段名称都是一样的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式