2016-04-13 10 views
-5

私はこのコードを持っています。コンパイルしようとすると、「名前はすでに既存のオブジェクトによって使用されています」というエラーが表示されます。しかし、私はこの名前の別のオブジェクトを持っていません。オブジェクト作成でoracleでエラーが発生する

drop type specii_inr; 
    CREATE OR REPLACE TYPE specii_inr UNDER gestiune_zoo 
    (specii_inrudite VARCHAR2(20), 
    OVERRIDING member procedure afiseaza_animal) 
    /
    CREATE OR REPLACE PROCEDURE specii_inr AS 
    OVERRIDING MEMBER PROCEDURE afiseaza_animal IS 
    BEGIN 
     dbms_output.put_line('Animale inrudite: '||specii_inrudite); 
    END afiseaza_animal; 
    END; 
    /
+1

「CREATE OR REPLACE PROCEDURE specii_inr」は、「CREATE OR REPLACE TYPE body specii_inr'」にする必要があります。 –

答えて

2

afiseaza_animal手順はタイプに属し、あなたは(CREATE TYPE BODYを使用して)タイプのボディでそれを定義する必要があり、ない

DROP TYPE specii_inr; 

CREATE TYPE specii_inr UNDER gestiune_zoo (
    specii_inrudite VARCHAR2(20), 
    OVERRIDING member procedure afiseaza_animal 
); 
/

CREATE OR REPLACE TYPE BODY specii_inr AS 
    OVERRIDING MEMBER PROCEDURE afiseaza_animal IS 
    BEGIN 
    dbms_output.put_line('Animale inrudite: '||specii_inrudite); 
    END afiseaza_animal; 
END; 
/
3

プロシージャにはタイプと同じ名前があります。作成するときに、「既存のオブジェクトエラーで既に名前が使用されています」というメッセージが表示されます。

手順に別の名前を使用してみてください。 (CREATE PROCEDUREを使用して)、スタンドアロン手順としてspecii_inr_proc

関連する問題