2015-10-13 48 views
2

我從一個功能 首先返回一個表,我創建一個包含將要返回函數返回表創建公共變量

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; 
功能

的問題是,當我在功能使用下面的行中的功能

v_ret t_nested_table創建t_nested_table類型的對象:= t_nested_table();

它創建類似SYSTPIeQAK45TO9TgUywLAQqu+g==公共訪問的對象,其他架構的用戶能夠訪問這個對象,有沒有什麼辦法讓他們私人。

+0

創建一個包,將其包裝在其中。將該類型創建爲記錄而不是對象。對象類型駐留在數據庫中。 –

+0

你能提供一些代碼片段或一些我可以參考的鏈接嗎? –

+0

查看答案和文檔鏈接。 –

回答

0

有沒有什麼辦法讓他們的私人

實現這一點的唯一方法是:

  • 創建
  • 包住包
  • 內部功能
  • 私人聲明封裝體而不是在說明書中。
  • 使用一個記錄類型而不是對象類型。對象類型存儲在數據庫中。

documentation

主體持有的實施細則和私人聲明,這是從代碼隱藏在包外。在包體的聲明部分之後是可選的初始化部分,它包含初始化包變量和執行任何其他一次性設置步驟的語句。