首页 > 解决方案 > Oracle 报错“包名和模式名必须与编辑对象匹配”

问题描述

我正在尝试构建一个包,我使用以下代码作为规范

CREATE OR REPLACE PACKAGE MBA.OSA
        AS
          FUNCTION FUNC_OSA 
          (inp_SKU in number, func_store_id in number, func_start_date in DATE, func_end_date in DATE)
          RETURN NUMBER;
        END OSA;

并跟随身体

CREATE OR REPLACE PACKAGE BODY MBA.OSA as

function FUNC_OSA  (inp_SKU in number, func_store_id in number, func_start_date in DATE, func_end_date in DATE) RETURN NUMBER
IS 
p_OSA NUMBER;
BEGIN
with period_len as (
select (func_end_date - func_start_date) len_per from dual
),
OSA_ as (
select dm.SKU,
      dm.store_id,
     ROUND(count(distinct dm.TRAN_DATE) / (select len_per from period_len) * 100,0) OSA
    --into OSA
    from datamarts.SALES_DETAIL_DM dm
    where SKU = inp_SKU
    AND TRAN_DATE between func_start_date and func_end_date
    AND dm.store_id = func_store_id
group by dm.SKU, dm.store_id
)
select OSA into p_OSA from OSA_;

RETURN p_OSA;
END FUNC_OSA;

END OSA;

但我不断收到同样的错误:

name of the package and name of schema must match with editing object

模式的名称是 MBA,它也在包名和包体中。我想,编辑对象是我的函数 func_osa,但如果我添加 MBA.FUNC_OSA 之类的方案名称,我会得到一堆或错误。

标签: sqloracle

解决方案


尝试 :

connect / as sysdba
alter session set current_schema=MBA;
**CREATE OR REPLACE PACKAGE OSA**
..
END OSA;
/
**CREATE OR REPLACE PACKAGE BODY OSA**
..
END OSA;
/

推荐阅读