Informix、DB2、Oracle、PostgreSQL 和 SQLite 的空间 SQL (ST_Geometry) 实现的差异很小。Esri(和 IBM,在使用 Informix 和 DB2 的情况下)致力于确保开放地理空间联盟 (OGC) 所制定的服务标准能够得到最广泛的应用。
但是,仍然存在两个例外。虽然这些例外在本质上没有违反 OGC 标准,但却是数据库管理系统之间的次要实现差异。
- 谓词值
Informix 和 PostgreSQL 中 ST_Geometry 的谓词函数返回 t 表示 true,返回 f 表示 false,而 DB2、Oracle 和 SQLite 中的 ST_Geometry 用 1 表示 true,用 0 表示 false。
在本 Informix SQL 示例中,当 building lots 包含 building footprints 时,如果 ST_Contains 函数返回 t,select 语句才返回这些 building ID。
当 lot 包含 footprint 时,如果返回 1,则 Oracle SELECT 语句中相同的 ST_Contains 函数返回同一 building ID。select bf.building_id "Building id" from buildingfootprints bf, lots where st_contains(lot,footprint) = 't';
select bf.building_id "Building id" from buildingfootprints bf, lots where sde.st_contains(lot,footprint) = 1;
- 限定函数
对 Oracle 中企业级地理数据库中的表执行 SQL 语句时,必须用方案名称限定 ST_Geometry 函数。
对 DB2、Informix 和 PostgreSQL 中具有 ST_Geometry 列的表执行 SQL 语句时,可以限定 ST_Geometry 函数,但并非必需如此。
SQLite 不使用方案名称,所以当针对含 ST_Geometry 列的表执行 SQL 时无需限定 ST_Geometry 函数。