これは不可能のようです。
回避策の1つは、トリガーを使用することです。
CREATE OR REPLACE TRIGGER test_trigger
BEFORE INSERT OR UPDATE
ON test_table
FOR EACH ROW
WHEN ( new.test_attr IS NULL )
BEGIN
:new.test_attr := NEW test_t();
END test_trigger;
/
ちなみに、デフォルト以外のコンストラクターを完全に無視するわけではなく、デフォルトのコンストラクターをオーバーライドします
CONSTRUCTOR FUNCTION test_t(in_val NUMBER)
RETURN SELF AS RESULT
DEFAULT NEW test_t(1)
を使用してテーブルを定義しようとすると、例外が発生します :