У меня проблема с PL/SQL
объектом, который я пытаюсь разработать.Это сообщение об ошибке:
PLS-00538: subprogram or cursor 'BASE_T' is declared in an
object type specification and must be defined in the object type
body
И мой объект таков:
-- Create the first object
CREATE OR REPLACE TYPE base_t IS OBJECT (
oname VARCHAR2 (30),
name VARCHAR2 (30),
CONSTRUCTOR FUNCTION base_t RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION base_t (oname VARCHAR2, name VARCHAR2) RETURN SELF AS RESULT,
MEMBER FUNCTION get_oname RETURN VARCHAR2,
MEMBER FUNCTION get_name RETURN VARCHAR2,
MEMBER PROCEDURE set_oname (oname VARCHAR2),
MEMBER PROCEDURE to_string
) INSTANTIABLE NOT FINAL;
/
-- Body of the object
CREATE OR REPLACE TYPE BODY base_t AS
CONSTRUCTOR FUNCTION base_t (oname VARCHAR2 , name VARCHAR2 ) RETURN SELF AS RESULT IS BEGIN
SELF.oname := oname;
SELF.name := name;
END;
MEMBER PROCEDURE set_oname (oname VARCHAR2 ) IS BEGIN
SELF.oname := oname;
END set_oname;
MEMBER FUNCTION get_oname RETURN VARCHAR2 IS BEGIN
RETURN SELF.oname;
END get_oname;
MEMBER FUNCTION get_name RETURN VARCHAR2 IS BEGIN
RETURN SELF.name;
END get_name;
MEMBER PROCEDURE to_string IS BEGIN
dbms_output.put_line('Hello ['||self.oname||'].');
END to_string;
END;
/
Проблема в том, что обычно это сообщение об ошибке вызывается несовместимой функцией /определения / имена процедур (как показано в этом вопросе SO здесь: Oracle Error PLS-00323: подпрограмма или курсор объявлены в спецификации пакета и должны быть определены в теле пакета ), но я проверил черези я не верю, что любое из моих имен испорчено, и все мои определения согласуются.Как еще вы можете получить это сообщение об ошибке?