首页 > 解决方案 > 将日期附加到字符串以在 oracle 中获取表名并对其进行选择查询

问题描述

我在 Oracle DB 中有如下表:abc20190101、abc20190102 等。每个都有相同的列数据类型和相同数量的列,只是填充了不同的数据。我有一个调度程序每天在特定时间对这些表运行查询。但表名应附加 sysdate。实际上我只需要在 abc20190101,xyz20190101 等 2 个表上执行选择和连接操作

我试过这个:

select * from (select concat('abc',(SELECT to_char(sysdate-1,'yyyymmdd') from dual)) as "Table" from dual) ;

但这只是返回表名作为输出,而不是表内的数据值。

我也试过这个 PL/SQL 过程:

declare tabname varchar(32); begin tabname := 'abc'|| TO_CHAR(SYSDATE, 'YYYYMMDD'); execute immediate 'select * from '|| tabname ; end;

但这会产生语法错误。由于我是 PL/SQL 存储过程的新手,所以我找不到错误在哪里。如果有人可以告诉如何对附加了动态 sysdate 的表名运行选择查询,这将很有帮助

标签: oracleplsql

解决方案


尝试动态 SQL 是正确的方法,但如果您选择了,则需要指定您希望如何返回结果。所以你需要类似的东西:

declare
  tabname varchar(32);
  result YOUR_TYPE;
begin
  tabname := 'abc'|| TO_CHAR(SYSDATE, 'YYYYMMDD');
  execute immediate 'select * from ' || tabname into result;
end;

如果您的查询返回单个结果,这将起作用,所以我猜您对此不满意。您可以选择进入收藏或批量收藏类型

可能您想对您选择的数据做一些事情,这样您就可以将结果作为参考光标返回或在循环中迭代结果


推荐阅读