3

このエラーを理解してください.. ud_mosh_dvig(x number, y number) を実行してから型本体を作成する必要があるかもしれません。

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 return number
);

create or replace type body CAR
is
member function ud_mosh_dvig return number
as
begin 
 self.ud_mosh:=self.mosh_dvig/self.massa;
 return self.ud_mosh;
end ud_mosh_dvig;
end;
4

1 に答える 1

4

デフォルトでは、非静的関数ごとに、暗黙的に宣言され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
于 2013-10-28T19:56:11.607 に答える