Oracle - 初始化一个用户定义类型的变量

时间:2015-10-20 08:06:41

标签: oracle plsql

我正在尝试在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更好的方法来初始化用户定义的变量?

1 个答案:

答案 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();