2010-11-24 133 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

系統定義屬性值 構造函數需要你通過 構造一個值的類型的每個屬性 。構造函數然後將 新實例 實例的屬性設置爲那些值

相關問題