Alter/Evolve 类型用户定义的构造函数签名 (PL/SQL)

Alter/Evolve Type User Defined Constructor Function Signature (PL/SQL)

如何发展用户定义的构造函数签名?

给定一个 Oracle PL/SQL 用户定义的类型,该类型具有 table 依赖项,而不是用 create/replace 语句替换它们,我需要改进这些类型。我通过 alter 语句找到了 Oracle documentation on how to drop/add attributes, and drop/add member functions,但我没有看到有关如何演化构造函数签名的信息。我需要在不创建新的 table/type 并将数据迁移到新的更新类型的情况下执行此操作。就我而言,使用 FORCE 也不起作用。

例如,给定以下类型,我如何更新用户定义的构造函数签名以包含要在初始化期间使用的新参数?

-- Create new type
CREATE OR REPLACE TYPE test_type AS OBJECT (
    test_attribute NUMBER(1, 0),

    CONSTRUCTOR FUNCTION test_type(
        p_test_attribute NUMBER DEFAULT NULL
    )
    RETURN SELF AS RESULT
);

-- Make this new type have table dependents
CREATE OR REPLACE TYPE test_type_table 
    AS TABLE OF test_type;

CREATE TYPE test_child_obj AS OBJECT (
    test_type_field test_type_table
);

-- Add new attribute via alter statement
ALTER TYPE test_type
    ADD ATTRIBUTE (new_attribute NUMBER)
    CASCADE NOT INCLUDING TABLE DATA;

我想将构造函数签名更新为以下内容:

CONSTRUCTOR FUNCTION test_type(
    p_test_attribute NUMBER DEFAULT NULL,
    p_new_attribute NUMBER DEFAULT NULL
)
RETURN SELF AS RESULT

我希望有如下所示的更改语句,但我找不到合适的更改语句。请帮忙。

ALTER TYPE test_type
    ADD CONSTRUCTOR FUNCTION test_type(
        p_test_attribute NUMBER DEFAULT NULL,
        p_new_attribute NUMBER DEFAULT NULL
    )
    RETURN SELF AS RESULT
    CASCADE NOT INCLUDING TABLE DATA;

事实证明,alter 语句实际上就是上文所述和下图所示的语句。但是,您可以将 运行 转换为 "too many declarations of 'test_type' match this call"。在我真正的问题中,问题是我所有的构造函数参数都有默认的 NULL 值,并且与我的原始构造函数冲突,所有的构造函数都有默认的 NULL 参数。如果我去掉 DEFAULT NULL,我可以添加新的构造函数。

ALTER TYPE test_type
    ADD CONSTRUCTOR FUNCTION test_type(
        p_test_attribute NUMBER DEFAULT NULL,
        p_new_attribute NUMBER DEFAULT NULL
    )
    RETURN SELF AS RESULT
    CASCADE NOT INCLUDING TABLE DATA;