Ste*_*gas 1 plsql initialization record
我有如下记录类型:
CREATE OR REPLACE TYPE CUSTOM_REC_TYPE AS OBJECT
(
ID NUMBER(19),
COLUMN1 NUMBER(19),
COLUMN2 NUMBER(19),
COLUMN3 NUMBER(19),
COLUMN4 NUMBER(19),
..... ,
..... ,
..... ,
.....
)
Run Code Online (Sandbox Code Playgroud)
我需要初始化这种类型的记录。使用以下语法:
l_custom_rec := CUSTOM_REC_TYPE();
Run Code Online (Sandbox Code Playgroud)
不起作用。我收到消息:
PLS-00306: wrong number or types of arguments in call to 'CUSTOM_REC_TYPE'
Run Code Online (Sandbox Code Playgroud)
我想我需要将所有值作为参数传递,即:
l_custom_rec := CUSTOM_REC_TYPE(null, null, null, .....);
Run Code Online (Sandbox Code Playgroud)
我可以避免这种情况吗?有没有办法在没有这么长的初始化的情况下使用我的记录?(记录类型有 90 个组件)。如果我根本不初始化它,我会收到错误:
ORA-06530: Reference to uninitialized composite
Run Code Online (Sandbox Code Playgroud)
还有其他情况,我在包中声明类型,根本不需要初始化。这怎么可能?
您需要定义一个构造函数:
create or replace type custom_rec_type as object
(
id number(19),
column1 number(19),
column2 number(19),
column3 number(19),
column4 number(19),
constructor function custom_rec_type
( id number default null,
column1 number default null,
column2 number default null,
column3 number default null,
column4 number default null
) return self as result
);
create or replace type body custom_rec_type as
constructor function custom_rec_type
( id number default null,
column1 number default null,
column2 number default null,
column3 number default null,
column4 number default null
) return self as result
is
begin
self.id := id;
self.column1 := column1;
self.column2 := column2;
self.column3 := column3;
self.column4 := column4;
return;
end;
end;
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
declare
crt1 custom_rec_type;
crt2 custom_rec_type;
begin
crt1 := custom_rec_type();
crt2 := custom_rec_type(column4=>23);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5925 次 |
| 最近记录: |