繁体   English   中英

Oracle:PostgreSQL中有与ROW等效的东西吗?

[英]Oracle: Is there an equivalent to ROW in PostgreSQL?

当我在PostgreSQL中实例化类型时,我可以

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)));

正如您在发布的代码中所指出的,Oracle中PostgreSQL的ROW构造函数等效于对象或集合构造函数

但是,没有单数表达式会创建所需类型的实例。 Oracle 11g R2数据库文档中可以明显看出,必须显式调用构造函数以创建和引用类型:

要初始化嵌套表或varray,请使用构造函数,这是系统定义的函数,其名称与集合类型相同。 此函数根据传递给它的元素构造集合。

您必须为每个varray和嵌套表变量显式调用一个构造函数。 关联数组是第三种集合,它不使用构造函数。 只要允许函数调用,就可以进行构造函数调用。

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

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

系统定义的属性值构造函数要求您为构造函数为每个类型的属性传递一个值。 然后,构造函数将新对象实例的属性设置为这些值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM