转换为子类型

时间:2015-10-01 17:36:30

标签: oracle object plsql

我有一个基类和另一个继承它的类。类似于以下内容

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)来解决这个问题。任何解决方案?

1 个答案:

答案 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