问题描述
在表中插入多个 select 语句时,我看到 00904: invalid identifier 错误
有谁知道为什么,或者如何修改这个 INSERT 查询以使其有效?
(i) 我已经确认这些列是有效的并且都存在
(ii) 单独运行时,单独的 select 语句执行没有问题
(iii) select 语句导致 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;