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

时间:2019-03-25 11:21:40

标签: oracle plsql

我有一个收藏夹,需要将此收藏夹复制到另一个收藏夹。

例如:

01:47

这是按参考还是按值分配?

这是复制嵌套表的正确方法吗?

我尝试过。似乎工作正常。 但是我在Oracle文档中找不到任何参考。

1 个答案:

答案 0 :(得分:4)

示例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 选项,则它们将通过引用传递。

您可以在这里Subprogram Parameter Modes

了解更多信息