2010-11-24 132 views
2

当我实例PostgreSQL中的类型,我可以做,Oracle:在PostgreSQL中是否有与ROW相当的功能?

INSERT INTO mountain VALUES ('Meru',4567,ROW(6.8,-3.2)); 

和ROW(...)将被强制转换为表格中对应的类型。在Oracle中,我必须这样做:

INSERT INTO mountain VALUES ('Meru',4567,GeoCoord(6.8,-3.2)); 

并手动将该类型放入INSERT中。

有什么办法让Oracle像Postgres一样行事?

编辑:表定义

CREATE TABLE Mountain (
Name VARCHAR(20) CONSTRAINT MountainKey PRIMARY KEY, 
Height NUMERIC CONSTRAINT MountainHeight 
CHECK (Height >= 0), 
Coordinates GeoCoord CONSTRAINT MountainCoord 
CHECK (((Coordinates).Longitude >= -180) AND 
     ((Coordinates).Longitude <= 180) AND 
     ((Coordinates).Latitude >= -90) AND 
     ((Coordinates).Latitude <= 90))); 
+1

Postgres表的表定义是什么?这将帮助我们不熟悉postgres语法理解它在做什么。 – JOTN 2010-11-24 22:15:18

+0

我已将表格定义添加到原始帖子。 – ANd 2010-11-25 18:11:51

回答

1

的PostgreSQL的甲骨文中排构造的等效是object or collection constructor,因为你已经在发布代码表示。

然而,没有单一表达式会创建所需类型的实例。从Oracle 11g R2 database documentation,显而易见的是,在构造函数必须显式调用创建和引用类型:

要初始化嵌套表或 VARRAY,使用构造,与同一个 系统定义函数 作为集合类型的名称。这个 函数构造从 传递给它的元素的集合。

您必须为每个变量和嵌套表 变量显式调用构造函数 。关联数组, 第三种集合,不使用 构造函数。在允许的函数调用为 的情况下,允许构造函数调用为 。

此外,请注意,默认构造函数可用于所有类型(关联数组除外),因此您并不需要编写自己的构造函数。

当考虑使用CREATE TYPE语句创建的模式级别类型时,行为也没有区别 - 在这种情况下也需要调用构造函数。从documentation

系统定义属性值 构造函数需要你通过 构造一个值的类型的每个属性 。构造函数然后将 新实例 实例的属性设置为那些值

相关问题