TL; 博士:
ユーザー定義のレコード タイプを宣言して、フィールドの 1 つに入力しない場合、そのフィールドがそのフィールドを尊重するようにするにはどうすればよい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
ですか?