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中不可能。我不同意“默认成员函数”会破坏面向对象方法的目的。