【发布时间】:2022-01-23 13:16:37
【问题描述】:
我用包的主体创建了一个包。包本身已编译,但主体没有。表已创建,字段存在,类型正确。但它给出了一个错误 32/5 PL / SQL:SQL 语句被忽略 49/17 PL / SQL:ORA-00942:表或视图不存在 帮助解决问题。
create or replace package dma.fill_account_turnover_f is
----------------------------------------------------------------------------------------------------
c_MartName constant varchar2(30 char) := 'dma.DM_ACCOUNT_TURNOVER_F';
----------------------------------------------------------------------------------------------------
/** –асчет оборотов по счетам за дату
* i_OnDate - дата расчета
*/
procedure fill
( i_OnDate in date
);
----------------------------------------------------------------------------------------------------
end fill_account_turnover_f;
/
create or replace package body dma.fill_account_turnover_f is
----------------------------------------------------------------------------------------------------
procedure Log
( i_message in varchar2
)
is
begin
dma.logger.writeLog('[' || c_MartName || '] ' || i_message);
end;
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
procedure fill
( i_OnDate in date
)
is
begin
Log( '[BEGIN] fill(i_OnDate => date '''
|| to_char(i_OnDate, 'yyyy-mm-dd')
|| ''');'
);
Log( 'delete on_date = '
|| to_char(i_OnDate, 'yyyy-mm-dd')
);
delete
from dma.dm_account_turnover_f f
where f.on_date = i_OnDate;
Log('insert');
insert
into dma.dm_account_turnover_f
( on_date
, account_rk
, credit_amount
, credit_amount_rub
, debet_amount
, debet_amount_rub
)
with wt_turn as
( select p.credit_account_rk as account_rk
, p.credit_amount as credit_amount
, p.credit_amount
* nvl(er.reduced_cource, 1) as credit_amount_rub
, cast(null as number) as debet_amount
, cast(null as number) as debet_amount_rub
from ds.ft_posting_f p
join ds.md_account_d a
on a.account_rk = p.credit_account_rk
left
join ds.md_exchange_rate_d er
on er.currency_rk = a.currency_rk
and i_OnDate between er.data_actual_date and er.data_actual_end_date
where p.oper_date = i_OnDate
and i_OnDate between a.data_actual_date and a.data_actual_end_date
and a.data_actual_date between trunc(i_OnDate, 'mm') and last_day(i_OnDate)
union all
select p.debet_account_rk as account_rk
, cast(null as number) as credit_amount
, cast(null as number) as credit_amount_rub
, p.debet_amount as debet_amount
, p.debet_amount
* nvl(er.reduced_cource, 1) as debet_amount_rub
from ds.ft_posting_f p
join ds.md_account_d a
on a.account_rk = p.debet_account_rk
left
join ds.md_exchange_rate_d er
on er.currency_rk = a.currency_rk
and i_OnDate between er.data_actual_date and er.data_actual_end_date
where p.oper_date = i_OnDate
and i_OnDate between a.data_actual_date and a.data_actual_end_date
and a.data_actual_date between trunc(i_OnDate, 'mm') and last_day(i_OnDate)
)
select i_OnDate as on_date
, t.account_rk
, sum(t.credit_amount) as credit_amount
, sum(t.credit_amount_rub) as credit_amount_rub
, sum(t.debet_amount) as debet_amount
, sum(t.debet_amount_rub) as debet_amount_rub
from wt_turn t
group by t.account_rk;
Log('[END] inserted ' || to_char(sql%rowcount) || ' rows.');
commit;
end;
----------------------------------------------------------------------------------------------------
end fill_account_turnover_f;
/ ```
【问题讨论】:
-
错误消息中的行号显示了它为哪个表提供了错误。这可能是你遇到this 问题
-
第 49 行指的是
ds.md_account_d。该包似乎属于 DMA,因此可能 DS 需要将 MD_ACCOUNT_D 的 READ 权限授予 DMA。您对使用多模式系统表示同情,因为设计在 Powerpoint 中可能看起来很棒,但在我的经验中它们只会带来无穷无尽的问题。 -
@WilliamRobertson 你是对的。非常感谢您的帮助!
-
不客气。我已将其添加为答案。