默认情况下,对于每个非静态函数,隐式声明self
的参数都处于IN
参数模式。这意味着,它根本无法修改。但是,需要注意的是,对于非静态程序,self
参数是IN OUT
默认参数模式。
虽然允许函数返回多个值、更改ud_mosh
对象的 value 属性并将相同的值返回给调用者并不是一个好习惯,但在这种情况下,您可以self
在参数模式下显式声明函数的IN OUT
参数:
create or replace type CAR as object (
mosh_dvig number,
obiem_dvig number,
color varchar2(20),
type_form varchar2(20),
massa number,
num_peredach number,
ud_mosh number,
member function ud_mosh_dvig(self in out car) return number
);
TYPE CAR compiled
create or replace type body CAR
is
member function ud_mosh_dvig(self in out car)
return number as
begin
self.ud_mosh := self.mosh_dvig/self.massa;
return self.ud_mosh;
end ud_mosh_dvig;
end;
TYPE BODY CAR compiled
但是您将无法在 SQL 中使用该函数,因为在IN OUT
参数模式下声明了函数的形式参数 - 仅限 PL/SQL
set serveroutput on;
clear screen;
declare
l_obj car;
l_obj1 car;
l_res number;
begin
l_obj := new car(1,1,'1','1',4,1,1);
l_res := l_obj.ud_mosh_dvig();
dbms_output.put_line('ud_mosh prop value: ' || l_obj.ud_mosh || chr(13)
|| 'Function returns: ' || to_char(l_res));
end;
/
anonymous block completed
ud_mosh prop value: 0.25
Function returns: 0.25