【问题标题】:Alter/Evolve Type User Defined Constructor Function Signature (PL/SQL)Alter/Evolve 类型用户定义的构造函数签名 (PL/SQL)
【发布时间】:2020-01-23 21:08:06
【问题描述】:

如何演变用户定义的构造函数签名?

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

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;

【问题讨论】:

    标签: oracle plsql constructor alter


    【解决方案1】:

    事实证明,alter 语句实际上就是上面所说和下面所示的那个。但是,您可能会遇到“与此调用匹配的 'test_type' 声明太多”。在我真正的问题中,问题是我的所有构造函数参数都具有默认的 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;
    

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多