oracle – 如何填充具有默认值的用户定义记录?
发布时间:2020-12-12 16:29:50 所属栏目:百科 来源:网络整理
导读:TL; DR: 如何声明用户定义的记录类型,以便如果我不填充其中一个字段,该字段将遵循其DEFAULT? 细节: 在我的包规范中,我定义了以下记录和表类型: /* set up a custom datatypes that will allow us to pass an array of values into CCD_UI procedures and
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个. 当我尝试编译此包时,我从包体中收到以下错误:
如果我从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; / (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |