【问题标题】:Add new attribute to existing PLSQL Type with default value without affecting existing calls使用默认值向现有 PLSQL 类型添加新属性,而不影响现有调用
【发布时间】:2021-05-02 09:22:46
【问题描述】:

我有下面的代码 sn-p 我正在创建一个具有 2 个属性的类型。

CREATE OR REPLACE
TYPE test_params IS OBJECT (
   F_days           number,
   F_comments   VARCHAR2 (100)
   
);
/

我正在使用上面的类型如下

Declare 
    tp test_params;
    tp1 test_params;
BEGIN 
    tp:= test_params(1,'asd');
    tp.f_days:=1;
   dbms_output.put_line(tp.f_days); 
END; 

打印 1

现在,如果我想在我的类型中再添加 1 个属性 cmets varchar(50) 并且我不想打扰上面的代码,我想要上面的输出。

请在这方面指导我

【问题讨论】:

    标签: sql plsql types


    【解决方案1】:

    您可以使用可选的第三个参数创建一个构造函数,然后您的代码将继续工作。

    create or replace 
    type test_params is object (
       f_days       number,
       f_comments   varchar2 (100),
       comments     varchar2(50),
    
       constructor function test_params(
           f_days     number,
           f_comments varchar2,
           comments   varchar2 default null
       ) return self as result
    );
    
    create or replace
    type body test_params
    as
       constructor function test_params(
           f_days     number,
           f_comments varchar2,
           comments   varchar2 default null
       ) return self as result
       as
       begin
           self.f_days := f_days;
           self.f_comments := f_comments;
           self.comments := comments;
           return;
       end;
    end;
    
    

    【讨论】:

    • 现有的 TYPE 有很多依赖项,例如 CREATE OR REPLACE TYPE varray_test_params is varray(20) of test_params; 有没有办法在不删除这些依赖项的情况下创建/替换。
    • 你可以试试FORCECREATE OR REPLACE TYPE t1 FORCE AS OBJECT (....)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2013-01-16
    • 2018-11-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多