Oracle "pl/sql"集合是按值分配还是按引用分配?



我有一个集合,需要将这个集合复制到另一个集合。

例如:

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 OUTOUT 参数按值传递。但是,如果指定 NOCOPY 选项,它们将通过引用传递。

您可以在此处阅读有关它的更多信息 子程序参数模式

最新更新