【发布时间】:2019-04-26 11:56:48
【问题描述】:
我正在尝试开发的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: subprogram or cursor is declared in a package specification and must be defined in the package body),但我已经检查过了,我不相信我的任何名字搞砸了,我所有的定义都是一致的。你怎么能得到那个错误信息?
【问题讨论】:
-
你还没有为
CONSTRUCTOR FUNCTION base_t RETURN SELF AS RESULT提供一个实现。
标签: sql oracle plsql user-defined-types