我有一个基类和另一个继承它的类。类似于以下内容
create or replace type object_base as object
(
number id,
member procedure UpdateTable
)
not final
/
create or replace type body object_base is
member procedure UpdateTable is
begin
null;
end;
end;
/
create or replace type my_object under object_base
(
overriding member procedure UpdateTable
)
/
create table my_table of my_object;
/
create or replace type body my_object is
overriding member procedure UpdateTable is
begin
update my_table set row = self where id = self.id;
end;
end;
我收到错误" ORA-00904无效的标识符"在线
update my_table set row = self where id = self.id;
似乎是因为它将self识别为object_base而不是my_object。我似乎无法通过使用treat(self as my_object)来解决这个问题。任何解决方案?
答案 0 :(得分:0)
您忽略的超类型中存在语法错误:
SQL> ed
Wrote file /tmp/afiedt.buf
1* create or replace type foo_t as object (number id) not final;
SQL> /
Warning: Type created with compilation errors.
Elapsed: 00:00:00.43
SQL> show errors
Errors for TYPE FOO_T:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PL/SQL: Compilation unit analysis terminated
1/30 PLS-00201: identifier 'ID' must be declared
SQL>
首先修复此错误。 @AlexPoole指出它应该是id number
。