oracle - 将日期附加到字符串以在 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 的表名运行选择查询,这将很有帮助
解决方案
尝试动态 SQL 是正确的方法,但如果您选择了,则需要指定您希望如何返回结果。所以你需要类似的东西:
declare
tabname varchar(32);
result YOUR_TYPE;
begin
tabname := 'abc'|| TO_CHAR(SYSDATE, 'YYYYMMDD');
execute immediate 'select * from ' || tabname into result;
end;
如果您的查询返回单个结果,这将起作用,所以我猜您对此不满意。您可以选择进入收藏或批量收藏类型
推荐阅读
- r - PMCID表行到列形式的解析
- mysql - Kubernetes 上的 PVC 如何与 MYSQL 协同工作?
- r - 来自 rstatix 的 anova_test 出现无法解释的错误
- javascript - Vue选择值
- javascript - 当其余应该是MaterialUI Grid中的列时,如何将两个项目作为行放在一列中?
- javascript - 如何根据其位置放置可拖动项目
- php - PHP / Laravel:如何处理 SSE 流并解析获取的数据
- css - 有没有办法在 sass 中确定第三方 css 的范围?
- python - Python 多进程良好实践
- node.js - nodejs中护照密码重置的问题