标识符过程无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标识符过程无效相关的知识,希望对你有一定的参考价值。

我正在编写程序将数据从一个名为'Dev(或testing)'的Db中的表传输到fdw db中的另一个表,我们将拥有存储库表。每个月,即上一个工作日-2,我们将从开发表中清除数据并将其传输到存储库表。我对这项技术和测试程序非常陌生并且遇到了错误

[错误] 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表中擦除数据时,可以指导我使用示例程序代码,这将是非常好的。

答案

正如评论中所建议的那样,使用NOT EXISTS。无论您是想检查远程表usb.bas2_agency_to_riskrate_repos@ofsadev中的重复项还是本地版本的副本,都不是celar。使用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;
另一答案

SELECT * FROM USB.BAS2_AGENCY_TO_RISKRATING_TRAN M WHERE USB.BAS2_AGENCY_TO_RISKRATE_REPOS.AS_OF_DATE != M.AS_OF_DATE ;

是错的。你不能对DB运行这样的选择,它没有来自子句的USB.BAS2_AGENCY_TO_RISKRATE_REPOS

以上是关于标识符过程无效的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程问题 - IN 和 OUT 变量是无效标识符 [关闭]

GLSL:“未声明的标识符‘texture2D’的无效调用”

存储过程 SQL 编译错误中的执行错误:Statement.execute 中的标识符“TEST3”无效

xcode 8.3.2 错误的包标识符、无效的代码签名标识符和无效的代码签名权利

ORA-00904 使用 CASE 语句更新表时标识符无效

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]