我正在尝试在Oracle中使用流水线功能。我已经宣布了我的类型:
create or replace type t_my_row as object (
ID NUMBER(19),
STATUS CHAR(4),
DATE_CREATED VARCHAR2(9),
FIELD1 VARCHAR2(3),
FIELD2 VARCHAR2(3),
FIELD3 VARCHAR2(3),
FIELD4 VARCHAR2(3)
);
在我的函数中,我循环游标并在使用pipe_row()返回之前将结果加载到上面类型的变量中。
一切正常,但我认为必须有一种更简单的方法来初始化我正在加载的变量。我是这样做的:
v_my_row t_my_row := t_my_row(null,null,null,null,null,null,null);
实际上有35个参数使得代码看起来非常难看 - 所以我的问题是,有没有比Oracle更好的方法来初始化用户定义的变量?
答案 0 :(得分:4)
您可以使用构造函数执行此操作:
create or replace type t_my_row as object
(
ID NUMBER(19),
STATUS CHAR(4),
DATE_CREATED VARCHAR2(9),
FIELD1 VARCHAR2(3),
FIELD2 VARCHAR2(3),
FIELD3 VARCHAR2(3),
FIELD4 VARCHAR2(3),
CONSTRUCTOR FUNCTION t_my_row(SELF IN OUT NOCOPY t_my_row)
RETURN SELF AS RESULT
);
/
CREATE TYPE BODY t_my_row AS
CONSTRUCTOR FUNCTION t_my_row(SELF IN OUT NOCOPY t_my_row)
RETURN SELF AS RESULT IS
BEGIN
self.id := null;
self.status := null;
self.date_created := null;
self.field1 := null;
self.field2 := null;
self.field3 := null;
self.field4 := null;
RETURN;
END;
END;
/
然后在PL / SQL代码中,您可以像这样使用它:
v_my_row t_my_row := t_my_row();