oracle – 如何填充具有默认值的用户定义记录?

前端之家收集整理的这篇文章主要介绍了oracle – 如何填充具有默认值的用户定义记录?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
TL; DR:

如何声明用户定义的记录类型,以便如果我不填充其中一个字段,该字段将遵循其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: too many values

如果我从RECORD_OPTION_ATTRIBUTES声明中删除option_attributes字段,则包将进行编译.

如何声明记录类型,以便如果我没有为option_attributes指定值,那么该字段将默认为NULL?

AFAIK根据 Oracle doc,“要将记录中的所有字段设置为默认值,请为其分配相同类型的未初始化记录”,这是他们的示例:
DECLARE
   TYPE RecordTyp IS RECORD (field1 NUMBER,field2 VARCHAR2(32) DEFAULT 'something');
   rec1 RecordTyp;
   rec2 RecordTyp;
BEGIN
-- At first,rec1 has the values you assign.
   rec1.field1 := 100; rec1.field2 := 'something else';
-- Assigning an empty record to rec1
-- resets fields to their default values.
-- Field1 is NULL and field2 is 'something'
-- due to the DEFAULT clause
   rec1 := rec2;
   DBMS_OUTPUT.PUT_LINE
     ('Field1 = ' || NVL(TO_CHAR(rec1.field1),'<NULL>') || ',field2 = ' || rec1.field2);
END;
/

猜你在找的Oracle相关文章