如何将对象声明为私有

Posted

技术标签:

【中文标题】如何将对象声明为私有【英文标题】:How to declare an object as private 【发布时间】:2015-10-07 07:41:56 【问题描述】:

我正在使用以下代码来创建一个对象

CREATE OR REPLACE TYPE sales_object IS OBJECT (
  dates DATE, 
  product_id VARCHAR2(20), 
  product_name VARCHAR2(50), 
  sale DECIMAL(15,2)
);

我用它来创建一个带有以下代码的表

CREATE OR REPLACE TYPE year_sales_tab IS TABLE OF sales_object;

现在这个表被用在一个函数中来存储和返回一个网格。

是否有任何方法可以将 sales_object 创建为私有?

【问题讨论】:

对象可以是私有的吗? 【参考方案1】:

是否有任何方法可以将 sales_object 创建为私有?

是的。

不要将 sales_object 类型创建为 OBJECT,而是将其创建为 中的 RECORD 并在您的代码中使用它。当你创建为对象时,它存储在数据库中,而如果你创建为记录,它只能在你的代码中使用,不能在其他地方使用。

TYPE sales_object
IS
  RECORD
  (
    DATES        DATE,
    PRODUCT_ID   VARCHAR2(20),
    PRODUCT_NAME VARCHAR2(50),
    sale         DECIMAL(15,2) 
  );

更新 OP实际上是在谈论特权。

您可以通过登录为您希望授予权限的用户来简单地创建类型,这样做只有当前用户将拥有所有者权限,而其他用户无法访问该对象。

如果您打算向特定用户授予权限,那么

GRANT EXECUTE ON "USER"."TYPENAME" TO "OTHER_USER";

【讨论】:

它给出以下警告Encountered the symbol "RECORD" when expecting one of the following: array varray table object fixed varying opaque sparse The symbol "object was inserted before "RECORD" to continue. 我只是希望在我的架构中创建的这个对象不应该在另一个架构中访问。 如果您想要这种模式级别的隐私,这完全取决于您提供的 GRANTS。如果授予其他用户访问权限,他们可以使用,否则他们不能。 使用 ROLES 提供这些特权总是更好。提供直接用户级别的授权会严重破坏数据库。 我同意,但是对于一个对象,对于一个用户来说,对维护数据库的 DBA 并没有太大的影响。此外,问题级别肯定不适用于生产环境。

以上是关于如何将对象声明为私有的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UI-router 将对象传递到状态?

如何在命名类别中声明私有属性?

如何通过 presentViewController 将对象传递到视图中?

vue框架

如何使用 jsp:include 参数标签将对象传递到另一个 jsp

私有成员是不是应该在惯用的 C# 中显式声明为私有? [关闭]