TL; 博士:
如何声明用户定义的记录类型,以便如果我不填充其中一个字段,该字段将兑现它DEFAULT
?
细节:
在我的包规范中,我定义了以下记录和表类型:
/* set up a custom datatypes that will allow us to pass an array of values into CCD_UI procedures and functions */
TYPE RECORD_OPTION_ATTRIBUTES IS RECORD(
option_name VARCHAR2(200) NOT NULL DEFAULT 'INVALID NAME"', /* default intentionally breaks HTML */
option_value VARCHAR2(200) NOT NULL DEFAULT 'INVALID VALUE"', /* default intentionally breaks HTML */
option_selected_ind NUMBER(1) NOT NULL DEFAULT '0',
option_class VARCHAR2(200) DEFAULT NULL,
option_attributes VARCHAR2(200) DEFAULT NULL
);
TYPE TABLE_OPTION_ATTRIBUTES IS TABLE OF RECORD_OPTION_ATTRIBUTES
INDEX BY BINARY_INTEGER;
在包体中,我的功能与此非常相似:
PROCEDURE populate_user_defined_table()
AS
v_criteria_pairs TABLE_OPTION_ATTRIBUTES;
BEGIN
SELECT some_column1 AS option_name, some_column2 AS option_value, some_column3 AS selected_ind,
some_column4 AS option_class
BULK COLLECT INTO v_criteria_pairs
FROM Some_Table
WHERE some_column='whatever';
END;
敏锐的眼睛会注意到我没有在option_attributes
字段中插入任何值;我只填充了 5 个可用字段中的 4 个。
当我尝试编译这个包时,我从包体中收到以下错误:
PL/SQL: ORA-00913: 值太多
如果我option_attributes
从声明中删除该字段RECORD_OPTION_ATTRIBUTES
,则该包将编译。
如何声明记录类型,以便如果我不为 指定值option_attributes
,该字段将默认为NULL
?