我们目前在Oracle 12c数据库上运行ArcGIS Server。GIS软件自己处理数据库,但我们希望对其表中包含的一些值进行测量。
我想列出表的几何字段(形状)中包含的一些线的长度,但我不能成功。
select * from TRONCON;
-- ok. Runs fine.
SELECT c.cur, SDO_GEOM.SDO_LENGTH(c.shape, m.diminfo)
FROM TRONCON c, user_sdo_geom_metadata m
WHERE m.table_name = 'TRONCON' AND m.column_name = 'SHAPE';
-- Fails with this error message :
-- ORA-06553: PLS-306: wrong number or types of arguments in call to 'SDO_LENGTH'
-- 06553. 00000 - "PLS-%s: %s"
-- *Cause:
-- *Action:
select * from user_sdo_geom_metadata;
-- Appears empty.
select * from all_sdo_geom_metadata;
-- Appears empty.因为我们不是用数据填充数据库的人(这是地理信息系统软件管理数据和在模式中执行结构更改的职责,如果需要的话),我们不知道为什么user_sdo_geom_metadata和all_sdo_geom_metadata表是空的,以及如果可以的话,如何重新生成它们。因为this case is unexpected。
一位同事想要测量一个面积,但遇到了同样的问题,试图用容差替换缺失的尺寸:
SELECT sdo_geom.sdo_area(SHAPE, 0.005, 'unit=hectare') FROM ZONE_INTERET;
-- ORA-06553: PLS-306: wrong number or types of arguments in call to 'SDO_AREA'
-- 06553. 00000 - "PLS-%s: %s" 我们如何才能使这些函数工作呢?
发布于 2019-12-19 17:16:50
USER_SDO_GEOM_METADATA表没有被填满的事实令人惊讶。ArcGIS与Oracle Spatial集成得相当好,并且在维护这些信息方面做得很好。无论何时定义新要素类(使用ArcCatalog),都应在该表中看到新行。如果它丢失,那么您将无法在数据上定义任何空间索引,这将使所有查询(包括查看)变得非常慢。
可能发生的情况是,您是以与ArcGIS应用程序不同的用户身份进行连接的?USER_SDO_GEOM_METADATA (如USER_TABLES)适用于当前连接的用户。ALL_SDO_GEOM_METADATA (就像ALL_TABLES一样)适用于当前用户(在其他模式中)可访问的所有表。
同样,在调用空间函数时,您不需要该表中的信息:您只需手动传递一个容差值。在较新的版本(18.1及更高版本)中,容差实际上是可选的:我们选择一个默认值。
下面是一些示例:
SQL> SELECT sdo_geom.sdo_area(geom, 0.005, 'unit=hectare') FROM us_counties where id=1;
SDO_GEOM.SDO_AREA(GEOM,0.005,'UNIT=HECTARE')
--------------------------------------------
156486.874
1 row selected.
SQL> SELECT sdo_geom.sdo_length(geom, 0.005, 'unit=km') FROM us_interstates where id=1;
SDO_GEOM.SDO_LENGTH(GEOM,0.005,'UNIT=KM')
-----------------------------------------
3956.18879
1 row selected.您得到的语法错误(ORA-06553)非常奇怪。尝试描述包:
describe sdo_geom这会产生大量的输出。但是在那里您应该看到SDO_LENGTH的两个签名
FUNCTION SDO_LENGTH RETURNS NUMBER
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
GEOM SDO_GEOMETRY IN
DIM SDO_DIM_ARRAY IN
UNIT VARCHAR2 IN DEFAULT
COUNT_SHARED_EDGES NUMBER IN DEFAULT
FUNCTION SDO_LENGTH RETURNS NUMBER
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
GEOM SDO_GEOMETRY IN
TOL NUMBER IN DEFAULT
UNIT VARCHAR2 IN DEFAULT
COUNT_SHARED_EDGES NUMBER IN DEFAULT这就是你看到的吗?
https://stackoverflow.com/questions/59394459
复制相似问题