创建PL/SQL对象类型时遇编译错误,请求排查解决
PL/SQL对象类型编译错误排查:PLS-00320及PLS-00905
问题根源
Student类型编译报错PLS-00320的核心原因是属性名与引用的对象类型名重名。PL/SQL对标识符大小写不敏感,你在Student类型里定义了名为address的属性,同时它的类型又是Address对象类型,这会让编译器无法正确解析属性的类型声明,直接终止编译。Course类型的PLS-00905错误只是因为依赖的Student类型无效,只要修复Student的问题,Course就能自动正常编译。
修复后的代码
-- 地址对象类型(原代码无问题,保留) CREATE OR REPLACE TYPE Address AS OBJECT ( city VARCHAR2(15), state VARCHAR2(15), pin NUMBER(6) ); -- 修改属性名,避免与类型名冲突(将address改为addr) CREATE OR REPLACE TYPE Student AS OBJECT ( id NUMBER(3), fName VARCHAR2(10), lName VARCHAR2(10), dob DATE, phone NUMBER(10), addr Address -- 这里修改了属性名 ) NOT FINAL; -- 依赖Student的Course类型,修复Student后可正常编译 CREATE OR REPLACE TYPE Course UNDER Student ( dept VARCHAR2(20), sem VARCHAR2(20) );
错误信息回顾
Student类型编译错误
Warning: Type created with compilation errors.
LINE/COL ERROR0/0 PL/SQL: Compilation unit analysis terminated
7/9 PLS-00320: the declaration of the type of this expression is incomplete or malformed
Course类型编译错误
Warning: Type created with compilation errors.
LINE/COL ERROR0/0 PL/SQL: Compilation unit analysis terminated
1/19 PLS-00905: object SYS.STUDENT is invalid
内容的提问来源于stack exchange,提问作者Riddesh Naik
相关产品推荐
相关产品推荐

