【发布时间】:2017-11-14 11:02:24
【问题描述】:
我正在构建一个查询,该查询在多个数据库中定位特定记录,并将它们插入到可以访问所有其余部分的主数据库中。
但即使选择运行良好,插入也无法使用甚至不存在的同义词给我一个无效的标识符。
查询:
INSERT INTO AUDIT_TABLE
Select Distinct tr.hmy, trim(tr.uref), tr.stotalamount, tr.upostdate, tr.sdateoccurred
,trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1)
,trim(v.ucode)
,trim(v.ulastname)
,trim(p.scode)
,trim(p.saddr1)
,trim(b.scode)
,trim(b.sdesc)
,l.icloseday
, case when l.icloseday <> 31 then trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) + (l.icloseday - 1 ) else last_day(trunc(tr.sdateoccurred )) end
, case when l.icloseday <> 31 then
case when trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) + l.icloseday <= trunc(tr.sdateoccurred) then add_months((tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1),1)
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end
,trim(u.uname)
,''
from trans@db_link tr
join detail@db_link d on d.hchkorchg = tr.hmy
join vendor@db_link v on tr.haccrualacct = v.hmyperson
join property@db_link p on p.hmy = d.hprop
and p.itype = 3
join bank@db_link b on b.hmy = tr.hperson
join pmuser@db_link u on u.hmy = tr.husercreatedby
join lockout@db_link l on l.hprop = p.hmy
where
1=1
and tr.itype = 2
and tr.manualcheck <> 0
and tr.sdatecreated between to_date(trunc(sysdate, 'YEAR')) and to_date(add_months(trunc(sysdate, 'YEAR'), 12)-1)
and case when l.icloseday <> 31 then
case when trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) + l.icloseday <= trunc(tr.sdateoccurred) then add_months((tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1),1)
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end <> trunc(tr.UPOSTDATE)
错误:
ORA-00904: "A2"."HUSERCREATEDBY": invalid identifier
ORA-02063: preceding line from db_link
最奇怪的部分:所有这些数据库都具有相同的架构,但当我遍历所有数据库时,只有其中一些因此错误而失败。
2017 年 11 月 14 日更新:
进一步研究,似乎如果我消除以下两个条件中的任何一个,则 INSERT 没有问题,但我一直在查看它们,不知道为什么引擎会因为这两个而出错简单的 SELECT 没有问题。
and tr.sdatecreated between to_date(trunc(sysdate, 'YEAR')) and to_date(add_months(trunc(sysdate, 'YEAR'), 12)-1)
或
and case when l.icloseday <> 31 then
case when trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) + l.icloseday <= trunc(tr.sdateoccurred) then add_months((tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1),1)
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end
else trunc(tr.sdateoccurred ) - (to_number(to_char(tr.sdateoccurred ,'DD')) - 1) end <> trunc(tr.UPOSTDATE)
【问题讨论】:
-
似乎缺少授权,您需要将选择访问权限授予其他用户。
-
但是如果我在没有插入的情况下运行 Select 就没有问题。只有当我想插入“选择”数据时才会出现错误。
-
是的..所以
INSERT授权丢失了。 -
是否有特定于来自 db_link 的数据的 INSERT 授权?因为在不使用跨数据库数据的情况下常规插入该表没有问题。仅当我使用另一个数据库中的 SELECT 时,INSERT 才会失败。