Oracle plsql对象成员函数

Oracle plsql对象成员函数,oracle,object,plsql,Oracle,Object,Plsql,假设对象创建为: CREATE OR REPLACE type test_obj as object ( item varchar2(20), constructor function test_obj return self as result ) CREATE OR REPLACE type body test_obj as constructor function test_obj return self as result as begin self.item

假设对象创建为:

CREATE OR REPLACE type test_obj as object ( 
  item varchar2(20),
  constructor function test_obj return self as result
)

CREATE OR REPLACE type body test_obj as
  constructor function test_obj return self as result as
  begin
    self.item := 'xyz';
    return;
  end;
end;
然后它可以在plsql中用作:

declare
  x test_obj; 
begin
  x:= test_obj();
end;
可以创建成员函数并调用它们,例如:

x test_obj := test_obj();
y number;    
y := x.somefunction('abc');
是否可以创建一个成员函数来支持这种语法类型:

x test_obj := test_obj();
y number;    
y := x('abc');

我认为这是不可能的。这样做会破坏面向对象方法的目的。 由于x是对象类型的实例,因此必须使用点表示法调用其方法

比尔,
TVS

换句话说,是否存在“默认”成员函数?据我所知不是这样。因为调用构造函数需要对象名,
x test_obj:=test_obj()甲骨文让门开着。也许有一天!!!在该范围内,
x
是局部变量的名称(类型为
test\u obj
)。不能像调用函数一样调用它。但是,您可以为
test_obj
创建一个替代构造函数,以便
y:=test_obj('abc')x
声明为由VARCHAR2索引的数组(例如
test_obj表
),则可以执行
x('abc'):=test_obj()
y:=x('abc')(如果<代码> y>代码>被声明为另一个代码> TestObjb< /COD>),我可以理解你想要在C++中有一个像函子的东西,对吗?int运算符()(char*p){/*此处的代码*/}。PL/SQL不允许重载运算符,如+,-,/,()。从这个意义上讲,似乎没有办法让函数类似于C++。我把这个标记为正确答案,因为在PLSQL中不可能。我不同意“默认成员函数”会破坏面向对象方法的目的。