在oracle中建立帶有座標欄位的表

2021-08-29 22:25:37 字數 2070 閱讀 3180

在oracle中建立帶有座標欄位的表。

1,通過create語句,建立乙個表,其中座標字段型別為mdsys.sdo_geometry;例如:

create table cola_markets (

mkt_id number primary key,

name varchar2(32),

shape mdsys.sdo_geometry);

2,在空間元資料表(user_sdo_geom_metadata )中新增一條記錄,例如:

insert into user_sdo_geom_metadata

values (

'cola_markets', //具有空間資料型別的標的名字

'shape', //儲存空間資料欄位的名字

mdsys.sdo_dim_array( //定義這個座標欄位的維數名稱(x,y 2維),最小最大值,以及座標的容忍度(精確度).

mdsys.sdo_dim_element('x', 0, 20, 0.005), //二維中的第一維名稱是x,最小值是0,最大值是20,容忍度是0.005。

mdsys.sdo_dim_element('y', 0, 20, 0.005) //二維中的第二維名稱是y,最小值是0,最大值是20,容忍度是0.005。

),null //座標體系對應的srid值

);3,建立空間索引,例如:

create index cola_spatial_idx

on cola_markets(shape)

indextype is mdsys.spatial_index;

以上三步完成後,這個具有空間資料型別的表,才算建立完畢!下面就需要往這個表中插入資料,insert語句如下:

insert into cola_markets values(

2,'cola_b',

mdsys.sdo_geometry(

2003, //圖形型別

null,//srid值

null,//點座標,如果型別是點,則這個引數有效,如果後面2個引數不為null,此引數無效

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(5,1, 8,1, 8,6, 5,7, 5,1)));

解釋:上面出現的1003,2003標示圖形型別。

第一位代表了維數,可以是二維、三維、四維;

第二位標識linear referencing system (lrs),非lrs的型別,此值為0;

第三、四位代表形狀,從00到09共有10種型別。00 – 忽略此形狀;01 – 點;02 – 線;03 – 多邊形或麵;04 – 型別的集合;05 – 01型別的集合,既多點集;06 – 02型別的集合;07 – 03型別的集合;08 – 體(三維空間中有多個面封閉起來的空間);09 – 08型別的集合;

sdo_elem_info代表幾何形狀包含的元素的資訊,最基本的元素是點。比如,乙個立方體包含多個面元素。元素還可以包含自己的子元素。

乙個元素的資訊是乙個陣列,陣列中有三個數。如(1, 1003, 1, 4, 2003, 1)包含兩個元素,第乙個元素是(1, 1003, 1),第二個元素是(4, 2003, 1)。每乙個陣列的含義如下:

第乙個數代表了元素在sdo_ordinates中起始偏移位。如sdo_ordinates是(5, 4, 2, 12, 8, 15, 3, 7),元素的起始偏移位是5,那麼(8, 15)是元素的第乙個點。如果元素是連續的,那麼元素最後點的偏移位就是下一元素的起始偏移位,如(8, 15)是元素的終點,同時也是下一元素的起點。

第二個數代表了元素的型別,最多有四位。如果元素是復合型別,那麼在它之後跟著是它的子元素。

第三個數指名如何解釋元素。對復合元素來說,表明它子元素的個數。對單元素來說,通常元素型別的進一步解釋,比如(1, 1003, 3)代表矩形,(1, 1003, 4)代表圓形……

sdo_ordinates

此屬性是乙個陣列,包含了幾何形狀所有的座標點。比如二維系統中,sdo_ordinates(5, 4, 2, 12, 8, 15, 3, 7)包含了四個點,分別是(5, 4); (2, 12); (8, 15); (3, 7)。

在oracle中建立dblink訪問其他資料庫

當有多個資料庫伺服器,如果想從一台伺服器訪問其他資料庫中的特定使用者下的表,則必須使用dblink。建立dblink的方法有2種 1 已經配置好本地服務名 資料庫伺服器上的 create public database link fwq12 connect to fzept identified b...

在oracle中建立自動增長字段

oracle在建立表時和其他的資料庫有點不一樣,如sql server可以在int型別的字段後加上 identity 1,1 該字段就會從1開始,按照 1的方式自增,將這個字段設定為主鍵,有利於我們進行資料的插入操作。mysql中可以使用 auto increment 即可。但是oracle有點麻煩...

在ORACLE中建立自增字段

通過建立序列來實現 oracle sequence的簡單介紹 在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。1 create sequence 你首先要有create sequence或者create any sequence許可權,cr...