无效的标识符程序

时间:2019-04-15 21:45:24

标签: stored-procedures plsql

我正在编写过程,以将数据从一个名为“ 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表中擦除数据的示例过程代码引导我,那也很好。

2 个答案:

答案 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;