Oracle 是否可以预先定义列数据类型?

Oracle 是否可以预先定义列数据类型?,oracle,Oracle,创建表时 Create table user( username varchar2(30) ); 是否可以在某处创建静态或预定义的数据类型 short_name varchar2(30) 然后在CREATETABLE语句中使用它 Create table user( username short_name ); 编辑: 我最初的想法是构建和构造不同的varchar2(和其他数据类型),以便在编写sql语句时方便参考,例如: tiny_name varchar2(10) short_name

创建表时

Create table user(
username varchar2(30)
);
是否可以在某处创建静态或预定义的数据类型

short_name varchar2(30)
然后在CREATETABLE语句中使用它

Create table user(
username short_name
);
编辑: 我最初的想法是构建和构造不同的varchar2(和其他数据类型),以便在编写sql语句时方便参考,例如:

tiny_name varchar2(10)
short_name varchar2(30)
medium_name varchar2(60)
long_name varchar2(120)

最接近的(到目前为止我已经看到)似乎是类型的使用,但这似乎没有涵盖我在问题中指定的被称为用户定义数据类型的内容。我们以前使用过它们,但在调试存储过程时遇到了问题,因为没有太多工具可以调试用户定义的类型。但我想这只是一个非常特殊的问题。只能在pl/sql(对于pl/sql和sql数据类型)中使用
subtype
关键字来完成。是的,这是可能的。在纯SQL中。记录在这里:@mathguy我没说它不起作用。我们可以让它工作问题是我们为什么要这么做?是的,例如,我们可以使用
varchar2(200)
的一个成员创建一个对象类型。我们从中得到了什么?我们插入到表中的每个类型都必须调用对象的构造函数。如果有人决定只插入一个字符串,我们将不得不处理数据类型不一致、依赖性问题等等。它不会像OP希望的那样与基本数据类型约束数据类型兼容。这将是一种全新的数据类型。@Moptan:您要查找的是在其他数据库中被称为“域”的数据类型。就个人而言,我喜欢它们——但Oracle不支持它们,因为它们有面向对象的类型系统。坦率地说,我认为类型太重,域“恰到好处”,但Oracle显然不同意我的观点,这就是所谓的用户定义数据类型。我们以前使用过它们,但在调试存储过程时遇到了问题,因为没有太多工具可以调试用户定义的类型。但我想这只是一个非常特殊的问题。只能在pl/sql(对于pl/sql和sql数据类型)中使用
subtype
关键字来完成。是的,这是可能的。在纯SQL中。记录在这里:@mathguy我没说它不起作用。我们可以让它工作问题是我们为什么要这么做?是的,例如,我们可以使用
varchar2(200)
的一个成员创建一个对象类型。我们从中得到了什么?我们插入到表中的每个类型都必须调用对象的构造函数。如果有人决定只插入一个字符串,我们将不得不处理数据类型不一致、依赖性问题等等。它不会像OP希望的那样与基本数据类型约束数据类型兼容。这将是一种全新的数据类型。@Moptan:您要查找的是在其他数据库中被称为“域”的数据类型。就个人而言,我喜欢它们——但Oracle不支持它们,因为它们有面向对象的类型系统。坦率地说,我认为类型太重,域“恰到好处”,但Oracle显然不同意我的观点。