oracle - 将多个选择语句插入表时看到错误
问题描述
在我的插入表中包含多个选择语句时,我看到 00904: invalid identifier 错误
有谁知道为什么,或者如何修改这个 INSERT 查询以便它可以工作?
(i) 我已经确认这些列是有效的并且都存在
(ii) 单独的 select 语句在单独运行时执行没有问题
(iii) 选择语句产生 NUMBER 数据类型的单个值
(iv) 错误消息中提到的第 4 列第 21 行恰好位于 F2 位置,在下面的 INSERT 语句中显示为 --> F2
INSERT INTO
VCHR_DASHB_SUMMARY_STATS (CurrWkCount, YEARTODATE)
SELECT
F1.CurrWkCount, -->F2.YEARTODATE
FROM
(
SELECT COUNT(VOUCHER_FILED_DATE) AS COUNT, SYSDATE AS "AS OF"
FROM CONTINUED_CLAIMS
WHERE VOUCHER_FILED_DATE >= trunc ( sysdate, 'iw' )
AND VOUCHER_FILED_DATE < trunc ( sysdate, 'iw' ) + 5
) F1
CROSS JOIN
(
SELECT COUNT(VOUCHER_FILED_DATE)
FROM CONTINUED_CLAIMS
WHERE voucher_filed_date >= trunc(sysdate, 'year')
) F2;
命令行错误:4 列:21 错误报告 - SQL 错误:ORA-00904:“F2”。“YEARTODATE”:无效标识符 00904。00000 -“%s:无效标识符”
解决方案
F2
是一个内联视图,它不包含YEARTODATE
列;它唯一的列是count(voucher_filed_date)
它甚至没有别名,所以......
也是如此f1.currwkcount
- 那里没有这样的专栏。您使用了别名count
(您不应该这样做;它是 Oracle 函数的名称并且会造成混淆)和"AS OF"
(完全一样:大写,两个单词,用双引号括起来 - 您不能以任何其他方式使用它) .
考虑这样的事情(注意我没有你的表,所以我无法测试它)。我假设count(voucher_filed_date)
代表yeartodate
; 如果不是,那是什么?
insert into vchr_dashb_summary_stats (currwkcount, yeartodate)
select f1.currwkcount, f2.yeartodate
from (select count(voucher_filed_date) as currwkcount,
sysdate as as_of
from continued_claims
where voucher_filed_date >= trunc ( sysdate, 'iw' )
and voucher_filed_date < trunc ( sysdate, 'iw' ) + 5
) f1
cross join
(select count(voucher_filed_date) as yeartodate
from continued_claims
where voucher_filed_date >= trunc(sysdate, 'year')
) f2;
推荐阅读
- php - 如何使用 Symfony 序列化程序将具有一对多关系的 xml 对象序列化
- micronaut - 使用 Micronaut 的 slf4j MDC 上下文
- php - PHP 下载准备好的 zip 文件,放置在 SFTP - wordpress 上
- amazon-web-services - 如何在 aws lex 中键入(单独的)问题类型?
- php - 在 XAMPP 服务器上运行的网页加载非常缓慢
- 2sxc - 无法在 Accordion 应用程序中编辑内容:错误请求
- c# - 具有许多文件名模式的 wpf OpenFileDialog
- angular - 如何以角度反应形式使用子组件?
- java - Swagger Code Gen - 包 javax.annotation 不存在
- docker - 为什么即使启用了 UFW,我也能够通过公共 IP 访问 redis?