首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle "pl/sql“集合是按值赋值还是按引用赋值?

问Oracle "pl/sql“集合是按值赋值还是按引用赋值?
EN

Stack Overflow用户
提问于 2019-03-25 19:21:40
回答 1查看 218关注 0票数 1

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

例如:

代码语言:javascript
复制
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文档中找不到任何参考资料。

EN

回答 1

Stack Overflow用户

发布于 2019-03-25 19:57:20

示例internal_table := p_table;中的赋值是assignment by value。

下面是一个小测试来展示它是如何工作的:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55336677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档