PLS-00539/PLS-00538报错:基于base_t创建item_t子类失败如何解决
问题原因
你出现这个报错的核心原因是item_t类型定义(specification)中构造函数的两个参数存在拼写错误,和类型实现(body)中的构造函数参数不匹配,Oracle会判定你在spec里声明的构造函数没有对应实现,同时在body里实现的构造函数没有提前在spec中声明,因此触发PLS-00538和PLS-00539两个关联错误:
PLS-00539: 对象类型体中声明的子程序'ITEM_T'必须在对象类型定义中声明
PLS-00538: 对象类型定义中声明的子程序或游标'ITEM_T'必须在对象类型体中定义
具体错误点
在item_t的类型定义部分,构造函数的两个参数拼写错误:
- 错写为
itmer_rating_agency,正确应为item_rating_agency - 错写为
item_realease_date,正确应为item_release_date
修复方法
只需要修改item_t类型定义的构造函数部分即可,修正后的完整item_t类型定义代码如下:
CREATE OR REPLACE TYPE item_t UNDER base_t ( item_id NUMBER , item_barcode VARCHAR2(20) , item_type NUMBER , item_title VARCHAR2(60) , item_subtitle VARCHAR2(60) , item_rating VARCHAR2(8) , item_rating_agency VARCHAR2(4) , item_release_date DATE , created_by NUMBER , creation_date DATE , last_update_by NUMBER , last_update_date DATE , CONSTRUCTOR FUNCTION item_t ( oname VARCHAR2 , name VARCHAR2 , item_id NUMBER , item_barcode VARCHAR2 , item_type NUMBER , item_title VARCHAR2 , item_subtitle VARCHAR2 , item_rating VARCHAR2 , item_rating_agency VARCHAR2 , item_release_date DATE , created_by NUMBER , creation_date DATE , last_update_by NUMBER , last_update_date DATE) RETURN SELF AS RESULT , OVERRIDING MEMBER FUNCTION get_name RETURN VARCHAR2 , OVERRIDING MEMBER FUNCTION to_string RETURN VARCHAR2) INSTANTIABLE NOT FINAL; /
修改后重新执行即可正常创建对象类型。
内容的提问来源于stack exchange,提问作者Artem Eduardov
相关产品推荐
相关产品推荐

