函数返回表正在创建公共变量

时间:2015-10-13 06:42:17

标签: oracle plsql

我从函数返回一个表 首先,我正在创建一个包含将要返回的字段的新对象类型

create or replace type t_col as object (
  i number,
  n varchar2(30)
);

然后我创建一个嵌套表:

create or replace type t_nested_table as table of t_col;

然后创建一个返回表

的函数
create or replace function return_table return t_nested_table as
  v_ret t_nested_table:= t_nested_table();

begin

  v_ret.extend;
  v_ret(v_ret.count) := t_col(1, 'one');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(2, 'two');

  v_ret.extend;
  v_ret(v_ret.count) := t_col(3, 'three');

  return v_ret;
end return_table;

问题是当我在函数中使用函数中的以下行创建类型为t_nested_table的对象时

  

v_ret t_nested_table:= t_nested_table();

它创建了一个具有公共访问权限的SYSTPIeQAK45TO9TgUywLAQqu+g==对象,其他模式用户可以访问此对象,是否可以将它们设为私有。

1 个答案:

答案 0 :(得分:0)

  

有没有办法让他们私有

实现这一目标的唯一方法是:

  • 创建
  • 将功能包装在包
  • 包体中执行私人声明,而不是在规范中。
  • 使用 RECORD 类型而不是对象类型。对象类型存储在数据库中。

来自documentation

  

正文包含实现细节和私有声明,这些声明对包外的代码隐藏。在包体的声明部分之后是可选的初始化部分,它保存用于初始化包变量并执行任何其他一次性设置步骤的语句。