【问题标题】:Type synonym in oracle在 oracle 中键入同义词
【发布时间】:2011-09-08 17:21:33
【问题描述】:

是否可以在 oracle 中创建“类型同义词”?比如:

CREATE PUBLIC SYNONYM EmailType FOR VARCHAR2(120);

【问题讨论】:

  • 你有对应的类型。
  • 但是语法是什么?我试过这个 CREATE TYPE EmailType AS VARCHAR2(120);,但我得到了 ORA-24344 成功,但编译错误。
  • CREATE OR REPLACE TYPE EmailType AS OBJECT( EMail VARCHAR2(120));

标签: database oracle plsql


【解决方案1】:

你不能这样做,但你可能想使用 SUBTYPE。 将 SUBTYPE 声明放在包内并使用它。

CREATE OR REPLACE PACKAGE SUBTYPES_PKG IS
  SUBTYPE EMAIL IS VARCHAR2(120);
END;

【讨论】:

  • 那么可以使用子类型:l_email_variable SUBTYPES_PKG.EMAIL;
【解决方案2】:

您要查找的内容在其他数据库中被称为“域”——Oracle 中没有域。关于这些坏消息我很遗憾。要在 Oracle 中使用 TYPE,您需要类似

CREATE OR REPLACE TYPE EMAILTYPE AS OBJECT
  (
  strEmail  VARCHAR2(120)
  )

然后您可能需要定义构造函数和方法来对您的类型进行操作。

分享和享受。

【讨论】:

  • @Tegiri:我不同意。根据我的经验,Oracle 的类型系统是一个重量级的解决方案,可以解决为“种类”数据创建有意义的名称的问题,这会带来一大堆不受欢迎的包袱。我已经使用了两者,并且为了我的用途我发现域是一个更好的解决方案。其他人无疑会不同意。如果我可以在添加新列时使用诸如“ALTER TABLE X ADD (Y DOMAIN_NAME.TABLE_NAME.COLUMN_NAME%TYPE)”之类的 PL/SQL 语法,我会很高兴,但这是不允许的。 YMMV。
【解决方案3】:

我目前无法访问数据库,所以我会在早上检查,但我很确定您可以做到这一点。虽然您不能将对象创建为公共同义词,但您可以在几乎任何对象上创建同义词。

CREATE OR REPLACE TYPE EmailType AS OBJECT( EMail VARCHAR2(120));
create or replace public synonym emailtype  for emailtype;

【讨论】:

  • 我认为这还可以,但我想使用“EmailType”作为 VARCHAR2(120) 的同义词
  • 这将创建emailtype 作为varchar2(120) 的同义词,但人们仍然可以键入 varchar2(120)。你不应该真的阻止他们。如果有人需要使用 varchar2(120) 创建另一种类型但不能创建,会发生什么情况?
猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2017-10-15
  • 2011-10-06
  • 2011-05-01
  • 2010-09-21
  • 2011-10-04
  • 1970-01-01
相关资源
最近更新 更多