我正在编写过程,以将数据从一个名为“ Dev(或测试)”的Db中的表传输到fdw db中的另一个表,那里将有存储库表。每个月的最后一个工作日-2,我们将清理dev表中的数据并将其传输到存储库表中。 我对这项技术和测试过程非常陌生,并且遇到以下错误
[错误] ORA-00904(12:15): PL / SQL:ORA-00904:“ USB”。“ BAS2_AGENCY_TO_RISKRATE_REPOS”。“ AS_OF_DATE:无效的标识符
CREATE OR REPLACE PROCEDURE USB.Basel2_riskrating
AS
BEGIN
INSERT INTO USB.BAS2_AGENCY_TO_RISKRATE_REPOS@OFSADEV --INSERTS DATA IN REPOSITORY TABLE
SELECT *
FROM USB.BAS2_AGENCY_TO_RISKRATING_TRAN M
WHERE USB.BAS2_AGENCY_TO_RISKRATE_REPOS.AS_OF_DATE != M.AS_OF_DATE ; --COMPARES DATE COLUMN TO REMOVE DUPLICACY
COMMIT;
END Basel2_riskrating;
在这方面,你能帮我吗?另外,如果每个月末能带我从USB.BAS2_AGENCY_TO_RISKRATING_TRAN表中擦除数据的示例过程代码引导我,那也很好。
答案 0 :(得分:0)
SELECT * FROM USB.BAS2_AGENCY_TO_RISKRATING_TRAN M WHERE USB.BAS2_AGENCY_TO_RISKRATE_REPOS.AS_OF_DATE != M.AS_OF_DATE ;
是错误的。您无法针对数据库运行此类选择,因为数据库中没有USB.BAS2_AGENCY_TO_RISKRATE_REPOS
答案 1 :(得分:0)
根据注释中的建议,使用NOT EXISTS
。是否要在远程表usb.bas2_agency_to_riskrate_repos@ofsadev
中检查重复项还是在本地表中查找重复项并不是一件容易的事。使用NOT EXISTS
内的适当表格进行比较。
CREATE OR REPLACE PROCEDURE usb.basel2_riskrating AS
BEGIN
INSERT INTO usb.bas2_agency_to_riskrate_repos@ofsadev
SELECT * FROM usb.bas2_agency_to_riskrating_tran m
WHERE NOT EXISTS ( select 1 from
usb.bas2_agency_to_riskrate_repos e --@ofsadev?
where e.as_of_date = m.as_of_date
);
COMMIT; --Try to avoid commits inside procedure, move it to execution section
END basel2_riskrating;