无法在oracle中执行包

无法在oracle中执行包,oracle,plsql,Oracle,Plsql,我的包裹如下: create or replace PACKAGE PKG_CONV_PRODUCT AS PROCEDURE SP_LOAD_DATA; PROCEDURE SP_CREATE_BACKUP_TABLES (P_LOADING_ID IN CONV_LOAD_STATS.LOADING_ID%TYPE); END PKG_CONV_PRODUCT; 和包装体,如下所示: create or replace PACKAGE BODY PKG_CONV_PRODU

我的包裹如下:

create or replace PACKAGE PKG_CONV_PRODUCT
AS
    PROCEDURE SP_LOAD_DATA;
    PROCEDURE SP_CREATE_BACKUP_TABLES (P_LOADING_ID IN CONV_LOAD_STATS.LOADING_ID%TYPE);
END PKG_CONV_PRODUCT;
和包装体,如下所示:

create or replace PACKAGE BODY PKG_CONV_PRODUCT
AS
    GV_LOADING_ID PLS_INTEGER;

    TYPE TYP_TABLE_NAME
    IS
        TABLE OF USER_TABLES.TABLE_NAME%TYPE;
        TAB_TABLE_NAME TYP_TABLE_NAME := TYP_TABLE_NAME   ( 'PRODUCTS',
            'PRODUCT_GROUP_CODES',
            'PRODUCT_SUB_GROUPS',
            'PRODUCT_GROUP_CODES_LICENSES',
            'PRODUCTS_OBJECTIVES', 
            'PRODUCTS_HISTORY', 
            'PRODUCTS_BREAK_POINTS', 
            'PRODUCTS_LICENSES', 
            'PRODUCTS_CONCESSION_PERCENT', 
            'PRODUCTS_BD_STATUS') 

    PROCEDURE SP_LOAD_DATA
    IS
    BEGIN
        GV_LOADING_ID := SEQ_CONV_PRODUCT.NEXTVAL;
        SP_CREATE_BACKUP_TABLES (GV_LOADING_ID);
    END SP_LOAD_DATA;

    PROCEDURE SP_CREATE_BACKUP_TABLES(P_LOADING_ID IN CONV_LOAD_STATS.LOADING_ID%TYPE)
    IS
        L_TABLE_NAME VARCHAR2(50);
    BEGIN
        FOR INDX IN TAB_TABLE_NAME.FIRST .. TAB_TABLE_NAME.LAST
        LOOP
            L_TABLE_NAME := TAB_TABLE_NAME (INDX);
            IF(L_TABLE_NAME = 'PRODUCT_GROUP_CODES_LICENSES')  THEN  
                L_TABLE_NAME :='PROD_GRP_CODES_LICENSES';
            ELSIF(L_TABLE_NAME = 'PRODUCTS_CONCESSION_PERCENT')  THEN  
                L_TABLE_NAME :='PROD_CONCESSION_PERCENT';
            ELSIF(L_TABLE_NAME = 'SPONSORS_ADVISORY_APPROVAL')  THEN  
                L_TABLE_NAME :='SPON_ADVISORY_APPROVAL';
            END IF;

            EXECUTE IMMEDIATE 
                'CREATE TABLE BONUS.' ||
                SUBSTR ('BKP' || 
                P_LOADING_ID || 
                L_TABLE_NAME ,
                1,
                30)|| 
                ' TABLESPACE APP_TABLE AS SELECT * FROM BONUS.' ||
                L_TABLE_NAME ;

            EXECUTE IMMEDIATE 
                'GRANT SELECT ON BONUS.' || 
                SUBSTR ('BKP' || 
                P_LOADING_ID || 
                L_TABLE_NAME ,
                1, 
                30)|| 
                ' TO ROLE_BONUS_SELECT_SR01';
        END LOOP;
    END SP_CREATE_BACKUP_TABLES;
END PKG_CONV_PRODUCT;
我得到了以下错误:

ORA-00955: name is already used by an existing object
ORA-06512: at "BONUS.PKG_CONV_PRODUCT", line 58
ORA-06512: at "BONUS.PKG_CONV_PRODUCT", line 40
ORA-06512: at line 2
你能帮我解决这个问题吗?

这个问题

SELECT *
FROM user_objects
WHERE object_name = 'PKG_CONV_PRODUCT';
应该告诉你什么东西已经在那里了。在不同的模式中可能存在同一个包的同义词

编辑:看起来您的问题与创建表奖金有关。。。在您的包中的声明

你可以加一个 立即执行(“放弃表奖金”);事先排队


请注意,将删除奖金表中的任何现有数据,您还需要另一个源来创建表语句,因为它当前正在查看奖金表。

PKG_CONV_PRODUCT 205320 PACKAGE 05-SEP-13 06-SEP-13 2013-09-06:04:32:50有效PKG_CONV_PRODUCT 205322 PACKAGE BODY 05-SEP-13 06-SEP-13 2013-09-06:04:33:33有效“名称已被现有对象使用”有什么不清楚的?