我有一个集合,需要将它复制到另一个集合。
例如:
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文档中找不到任何参考资料。
发布于 2019-03-25 19:57:20
示例internal_table := p_table;中的赋值是assignment by value。
下面是一个小测试来展示它是如何工作的:
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选项,它们将通过引用传递。
你可以在这里阅读更多信息Subprogram Parameter Modes
https://stackoverflow.com/questions/55336677
复制相似问题