Setter Oracle 数据库中 UDT 中的方法
Setter methods in UDT in Oracle database
我对此还很陌生,正在努力解决这个问题。 UDT 能够定义您可以在存储的对象上调用的方法,我似乎创建了一个 returns 值很好的方法,但想知道是否可以创建一个 setter 方法。这个场景不是很有用,但它很简单只是为了澄清
比如我有这个类型:
create TYPE TestType2 AS OBJECT(
Numb NUMBER(4),
Str VARCHAR2(10),
MEMBER FUNCTION setNum(numba NUMBER) RETURN NUMBER
);
编译得很好所以我的假设 setter 方法是允许的
我已尝试创建以下主体类型:
CREATE TYPE BODY TestType2 as
member function setNum(numba NUMBER) return NUMBER is
begin
SELF.Numb := numba;
return SELF.Numb;
END;
END;
然而,这不会给我以下错误:
Error(3,9): PL/SQL: Statement ignored
Error(3,14): PLS-00363: expression 'SELF.NUMB' cannot be used as an assignment target
有没有办法创建 set 方法,或者这是否只允许在存储过程中使用?
这是一个模糊的错误。问题是成员函数采用 SELF 的隐式参数。所以如果你想改变一些东西,你需要明确参数:
create or replace TYPE TestType2 AS OBJECT(
Numb NUMBER(4,0),
Str VARCHAR2(10),
MEMBER procedure setNum(self in out TestType2, numba NUMBER )
);
/
CREATE or replace TYPE BODY TestType2 as
member function setNum(self in out TestType2 , numba NUMBER) return NUMBER
is
begin
self.Numb := numba;
return SELF.Numb;
END;
END;
/
请注意,调用函数时 SELF 参数保持隐式:
declare
t TestType2 := TestType2(4, 'TEST');
n pls_integer;
begin
dbms_output.put_line('1' || t.numb);
n := t.setNum(8);
dbms_output.put_line('2' || t.numb);
end;
/
顺便说一下,setter 方法不需要是函数;我们也可以有会员程序。
create or replace TYPE TestType2 AS OBJECT(
Numb NUMBER(4,0),
Str VARCHAR2(10),
MEMBER procedure setNum(self in out TestType2, numba NUMBER ),
MEMBER FUNCTION getNum RETURN NUMBER
);
/
CREATE or replace TYPE BODY TestType2 as
member procedure setNum(self in out TestType2, numba NUMBER )
is
begin
self.Numb := numba;
END;
MEMBER FUNCTION getNum RETURN NUMBER
is
begin
return self.numb;
end;
END;
/
我对此还很陌生,正在努力解决这个问题。 UDT 能够定义您可以在存储的对象上调用的方法,我似乎创建了一个 returns 值很好的方法,但想知道是否可以创建一个 setter 方法。这个场景不是很有用,但它很简单只是为了澄清
比如我有这个类型:
create TYPE TestType2 AS OBJECT(
Numb NUMBER(4),
Str VARCHAR2(10),
MEMBER FUNCTION setNum(numba NUMBER) RETURN NUMBER
);
编译得很好所以我的假设 setter 方法是允许的 我已尝试创建以下主体类型:
CREATE TYPE BODY TestType2 as
member function setNum(numba NUMBER) return NUMBER is
begin
SELF.Numb := numba;
return SELF.Numb;
END;
END;
然而,这不会给我以下错误:
Error(3,9): PL/SQL: Statement ignored
Error(3,14): PLS-00363: expression 'SELF.NUMB' cannot be used as an assignment target
有没有办法创建 set 方法,或者这是否只允许在存储过程中使用?
这是一个模糊的错误。问题是成员函数采用 SELF 的隐式参数。所以如果你想改变一些东西,你需要明确参数:
create or replace TYPE TestType2 AS OBJECT(
Numb NUMBER(4,0),
Str VARCHAR2(10),
MEMBER procedure setNum(self in out TestType2, numba NUMBER )
);
/
CREATE or replace TYPE BODY TestType2 as
member function setNum(self in out TestType2 , numba NUMBER) return NUMBER
is
begin
self.Numb := numba;
return SELF.Numb;
END;
END;
/
请注意,调用函数时 SELF 参数保持隐式:
declare
t TestType2 := TestType2(4, 'TEST');
n pls_integer;
begin
dbms_output.put_line('1' || t.numb);
n := t.setNum(8);
dbms_output.put_line('2' || t.numb);
end;
/
顺便说一下,setter 方法不需要是函数;我们也可以有会员程序。
create or replace TYPE TestType2 AS OBJECT(
Numb NUMBER(4,0),
Str VARCHAR2(10),
MEMBER procedure setNum(self in out TestType2, numba NUMBER ),
MEMBER FUNCTION getNum RETURN NUMBER
);
/
CREATE or replace TYPE BODY TestType2 as
member procedure setNum(self in out TestType2, numba NUMBER )
is
begin
self.Numb := numba;
END;
MEMBER FUNCTION getNum RETURN NUMBER
is
begin
return self.numb;
end;
END;
/