gpt4 book ai didi

oracle - 创建类型。 pls 00363 表达式不能用作赋值

转载 作者:行者123 更新时间:2023-12-04 02:42:18 25 4
gpt4 key购买 nike

请帮助我理解这个错误..可能是我必须执行 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;

最佳答案

默认情况下,对于每个非静态函数,隐式声明的self 参数处于IN 参数模式。这意味着,它根本无法修改。但是,需要注意的是,对于非静态程序,self参数是IN OUT默认参数模式。

虽然允许一个函数返回多个值不是一个好习惯,改变一个对象的值 ud_mosh 属性并返回相同的值给调用者,在这种情况下,你可以显式声明selfIN 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

关于oracle - 创建类型。 pls 00363 表达式不能用作赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19642412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com