在 oracle 中键入同义词

Posted

技术标签:

【中文标题】在 oracle 中键入同义词【英文标题】:Type synonym in 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)); 【参考方案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) 创建另一种类型但不能创建,会发生什么情况?

以上是关于在 oracle 中键入同义词的主要内容,如果未能解决你的问题,请参考以下文章

Oracle怎样创建同义词

JavaScript Switch语句 - 单个案例中的同义词

oracle 同义词

oracle 中怎么创建同义词?

oracle 查看同义词

在 oracle 10G 中编写私有同义词的语法是啥?