gpt4 book ai didi

oracle - 如何在 PLSQL 中填充内存表?

转载 作者:行者123 更新时间:2023-12-02 00:56:25 25 4
gpt4 key购买 nike

我不知道这是否是正确的术语,但我将这样创建的对象称为“内存表”:

create type InMemReg is object (field1 varchar2(10), field2 varchar2(20), field3 number);
create type InMemTab is table of InMemReg;

在这种情况下,我的“内存表”是“InMemTab”。我的问题是,当我之前不知道元素的数量时,如何填充这种对象?我在某些地方看到过这种类型的初始化:

declare
v_uno InMemReg := InMemReg('a','b',1999);
v_dos InMemReg := InMemReg('A','Z',2000);
t_tres InMemTab := InMemTab();
begin
t_tres := InMemTab(v_uno, v_dos);

在这种情况下,我在初始化“t_tres”之前明确有 2 个对象,但在动态场景中,我可能有 n 个元素,但我不知道如何填充它。

在另一种面向对象语言中可能是这样的:

t_tres.add(OtherObject)

最佳答案

InMemTab 类型是 Oracle 术语中的嵌套表。

add 方法等效的是调用 extend 方法,然后将 OtherObject 分配给嵌套表中的最后一个位置.

SQL> ed
Wrote file afiedt.buf

1 declare
2 v_uno InMemReg := InMemReg('a','b',1999);
3 v_dos InMemReg := InMemReg('A','Z',2000);
4 t_tres InMemTab := InMemTab();
5 begin
6 t_tres.extend;
7 t_tres( t_tres.count ) := v_uno;
8 t_tres.extend;
9 t_tres( t_tres.count ) := v_dos;
10 dbms_output.put_line( 't_tres has ' || t_tres.count || ' elements.' );
11* end;
12 /
t_tres has 2 elements.

PL/SQL procedure successfully completed.

您也可以将其分解到add 过程中

SQL> ed
Wrote file afiedt.buf

1 declare
2 v_uno InMemReg := InMemReg('a','b',1999);
3 v_dos InMemReg := InMemReg('A','Z',2000);
4 t_tres InMemTab := InMemTab();
5 procedure add( p_nt IN OUT InMemTab,
6 p_elem IN InMemReg )
7 as
8 begin
9 p_nt.extend;
10 p_nt( p_nt.count ) := p_elem;
11 end;
12 begin
13 add( t_tres, v_uno );
14 add( t_tres, v_dos );
15 dbms_output.put_line( 't_tres has ' || t_tres.count || ' elements.' );
16* end;
17 /
t_tres has 2 elements.

PL/SQL procedure successfully completed.

关于oracle - 如何在 PLSQL 中填充内存表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12186991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com