2017-11-01 6 views
0

Oracle을 사용하는 유형의 유형 계층을 만들려고하지만 기능을 생성 할 때 PLS-00539 및 PLS-00538 오류가 발생합니다. 이 시점까지UDT 함수를 생성 할 때 PLS-00539 및 PLS-00538 오류가 발생합니다.

CREATE OR REPLACE TYPE VC_MNumber AS Object ( 
    idno NUMBER, 
    MEMBER FUNCTION dimension RETURN NUMBER , 
    MEMBER FUNCTION typeName RETURN VARCHAR2) NOT INSTANTIABLE NOT FINAL; 
/

DROP TYPE VC_MINTEGER; 

CREATE OR REPLACE TYPE VC_MInteger UNDER VC_MNumber ( 
    OVERRIDING MEMBER FUNCTION dimension RETURN NUMBER , 
    OVERRIDING MEMBER FUNCTION typeName RETURN VARCHAR2); 
/

CREATE OR REPLACE TYPE VC_MReal UNDER VC_MNumber( 
    YDCCoeff NUMBER, 
    CbDCCoeff NUMBER, 
    CrDCCoeff NUMBER, 
    OVERRIDING MEMBER FUNCTION typeDimension RETURN NUMBER, 
    OVERRIDING MEMBER FUNCTION typeName RETURN VARCHAR2) FINAL; 
/

다 좋아,하지만 기능을 만들려고 할 때 :

내가 유형을 만드는 데 사용하고있는 코드는

CREATE OR REPLACE TYPE BODY VC_MReal AS 
    OVERRIDING MEMBER FUNCTION typeDimension RETURN NUMBER IS 
    var_dimension  number := 10; 
    BEGIN 
     RETURN var_dimension; 
    END; 
    MEMBER FUNCTION typeName RETURN VARCHAR2 IS 
    var_typeName  VARCHAR2(400) := 'VC_MREAL'; 
    BEGIN 
     RETURN var_typeName; 
    END; 
END; 
/

나는 오류 PLS 얻을 -00539 및 PLS-00538. 내가 뭘 잘못하고 있는지 모르겠다. 이걸로 고맙겠습니다. 실수는 어디 있습니까?

미리 감사드립니다.

답변

1

PLS-00538 : 서브 프로그램 또는 커서 'TYPENAME은'객체 타입 사양에 선언하고 개체 유형 본문에 정의해야합니다 PLS-00539 : 서브 프로그램 'TYPENAME는'오브젝트 유형 바디 에 선언 및 개체 유형 사양에서 정의해야합니다

선언이 explaination 인라인 볼 때 당신이 만든 몇 가지 실수가 있습니다

CREATE OR REPLACE TYPE VC_MNumber AS OBJECT 
(
    idno NUMBER, 
    MEMBER FUNCTION dimension 
     RETURN NUMBER, 
    MEMBER FUNCTION typeName 
     RETURN VARCHAR2 
) 
    NOT INSTANTIABLE NOT FINAL; 
/

--DROP TYPE VC_MINTEGER; 

CREATE OR REPLACE TYPE VC_MInteger 
    UNDER VC_MNumber 
    (
     OVERRIDING MEMBER FUNCTION dimension 
     RETURN NUMBER, 
     OVERRIDING MEMBER FUNCTION typeName 
     RETURN VARCHAR2 
    ); 
/

CREATE OR REPLACE TYPE VC_MReal 
    UNDER VC_MNumber 
    (
     YDCCoeff NUMBER, 
     CbDCCoeff NUMBER, 
     CrDCCoeff NUMBER, 
     OVERRIDING MEMBER FUNCTION Dimension --<--Overriding function should have same name 
     RETURN NUMBER, 
     OVERRIDING MEMBER FUNCTION typeName 
     RETURN VARCHAR2 
    ) 
    FINAL; 
/

CREATE OR REPLACE TYPE BODY VC_MReal 
AS 
    OVERRIDING MEMBER FUNCTION Dimension 
     RETURN NUMBER 
    IS 
     var_dimension NUMBER := 10; 
    BEGIN 
     RETURN var_dimension; 
    END; 

    OVERRIDING MEMBER FUNCTION typeName --<-- You declared in Object type as `overriding` function and using it as `Member function` alone. 
     RETURN VARCHAR2 
    IS 
     var_typeName VARCHAR2 (400) := 'VC_MREAL'; 
    BEGIN 
     RETURN var_typeName; 
    END; 
END; 
/