代码之家  ›  专栏  ›  技术社区  ›  jhon.smith

plsql深度嵌套集合初始化

  •  0
  • jhon.smith  · 技术社区  · 3 年前

    create or replace type invoice_obt
    as object (
    invoice_id number
    );
    /
    
    create type invoices_ntt
    as table of invoice_obt;
    /
    
    create type customer_with_invoices
    as object (
    customer_id number,
    invoices invoices_ntt
    )
    
    declare                                                        
    l_customer customer_with_invoices;                             
    l_invoices invoices_ntt := invoices_ntt();                     
    begin                                                          
    l_invoices.extend(3);                                          
    l_invoices(1) := invoice_obt(100);                             
    l_invoices(2) := invoice_obt(200);                             
    l_invoices(3) := invoice_obt(200);                             
    l_customer := customer_with_invoices(1,l_invoices);                                                 
    end;    
    

    如何使用dbms\U输出打印出l\U客户。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Aleksej    3 年前

    当你打电话的时候 customer_with_invoices() ,则需要调用构造函数,因此需要传递对象属性的参数,甚至 null 如果你愿意的话。

    此外,还有 extend 适用于 l_customers.invoices l_customers .

    例如,这是有效的:

    declare
        l_customers customer_with_invoices := customer_with_invoices(null, null);
    begin
        l_customers.invoices := invoices_ntt();
        l_customers.invoices.extend(1);
        l_customers.invoices(1) := new invoice_obt(1);
        --
        dbms_output.put_line(l_customers.invoices(1).invoice_id);
    end;
    /
    

    打印对象内容的步骤 dbms_output.put_line ,您需要将元素传递给它,因为它不处理对象。在您编辑的代码中,这是一个示例:

    for i in 1 ..  l_customer.invoices.count loop
        dbms_output.put_line('invoice (' || i || ') = ' || l_customer.invoices(i).invoice_id);
    end loop;   
    

    .count 或者类似的。