首页 > 解决方案 > 如何修复 PL/SQL:ORA-00918:Oracle 中定义不明确的列

问题描述

我在 Oracle 中创建一个包,当我编译包的主体时,我得到 PL/SQL: ORA-00918: column ambiguously defined 错误。

我已经浏览了代码,并仔细检查了别名,所以对于我收到此错误的原因感到有些困惑。

有问题的错误在第 10 行。WHERE 子句中的 PERSON_CODE、FUND_YEAR 和 UIO_ID 是我在包中创建的函数的参数。

    SELECT CASE 
            WHEN LH.PROP_NOT_TAUGHT > 50 AND LA.DELIVERY_PROVIDER IS NOT NULL THEN TO_NUMBER(OU.UKPRN)
            ELSE LA.UK_PROV_NO 
           END AS UKPRN_T
    FROM FES.LEARNER_AIMS LA
     JOIN FES.LEARNER_HE LH
      ON LH.PERSON_CODE = LA.PERSON_CODE
       AND LH.FUNDING_YEAR = LA.FUNDING_YEAR
     LEFT JOIN FES.ORGANISATION_UNITS OU
      ON OU.ORGANISATION_CODE = LA.DELIVERY_PROVIDER
    WHERE LA.PERSON_CODE = PERSON_CODE
     AND LA.FUNDING_YEAR = FUND_YEAR
     AND LA.UIO_ID = UIO_ID;

标签: sqloracleora-00918

解决方案


您的函数参数名称和字段名称发生冲突,从而产生阴影效果。您可以在参数名称前加上函数名称以消除歧义

 AND LA.UIO_ID = MyfunctionName.UIO_ID;

或者,重命名参数以避免此类情况发生。


推荐阅读