我有一个集合,需要将这个集合复制到另一个集合。
例如:
TYPE my_table_type IS TABLE OF some_object;
procedure test(p_table IN my_table_type) is
internal_table my_table_type;
begin
internal_table := p_table;
internal_table.extend;
....
end;
这是按引用还是按值分配?
这是复制嵌套表的正确方法吗?
我试过了。它似乎工作正常。但我在 Oracle 文档中找不到任何参考。
示例中的赋值internal_table := p_table;
是按值赋值的赋值。
这里有一个小测试来展示它是如何工作的:
set serveroutput on
declare
TYPE my_table_type IS TABLE OF integer;
table_ my_table_type := new my_table_type();
internal_table my_table_type;
begin
table_.extend(1);
table_(1) := 123;
dbms_output.put_line(table_(1)); --output is 123
internal_table := table_;
dbms_output.put_line(internal_table(1)); --output is 123
table_(1) := 321;
dbms_output.put_line(table_(1)); --output is 321
dbms_output.put_line(internal_table(1)); --output is 123
end;
如您所见,internal_table
中的值没有改变,这意味着我们有两个不同的集合。
现在,如果您谈论的是过程test
输入参数,则可以通过引用或值传递它,这取决于参数的模式:
IN 参数始终通过引用传递。
默认情况下,IN OUT 或 OUT 参数按值传递。但是,如果指定 NOCOPY 选项,它们将通过引用传递。
您可以在此处阅读有关它的更多信息 子程序参数模式