Исходные данные.
Есть БД, в которой размещаются пространственные данные в формате ArcGIS (St_Geometry).
Соответственно, к СУБД прикручена библиотека st_shapelib.dll.
Есть внешнее приложение (на C++), не использующее API ArcSDE, но читающее и пишущее пространственные данные. Для этого используется формат WKB. Доступ к Oracle осуществляется с помощью OCI.
Для чтения/записи двоичных данных (BLOB) в формате WKB, соответственно, используется OCILobLocator.
Примеры запросов:
чтение
Код: Выделить всё
SELECT "OBJECTID", SDE.ST_AsBinary("SHAPE") as "SHAPE" FROM "SDE"."MYTABLE"
запись
Код: Выделить всё
UPDATE "SDE"."MYTABLE" SET "SHAPE" = SDE.ST_GeomFromWKB(:GEOM, 3405) WHERE "OBJECTID" = 1
Суть проблемы.
При чтении проблем нет.
При попытке вставки/изменения записи получаю следующую ошибку:
ORA-03001: unimplemented feature
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 237
ORA-06512: at "SDE.ST_GEOMETRY_OPERATORS", line 162
При этом вызов со стороны приложения корректен, так как если то же самое делать с таблицей, где поле пространственных данных не SDE.ST_Geometry, а штатное от Oracle Spatial - SDO_GEOMETRY, то запись проходит успешно (само собой, в этом случае через "SHAPE" = MDSYS.SDO_GEOMETRY("SHAPE_BLOB", 3405)).
Значит, BLOB передается корректно.
Что любопытно, выполнение в отношении ArcSDE того же кода и с теми же данными, что вызывает OCI-приложение, но из SQL Developer-а, отрабатывает замечательно!
Код: Выделить всё
-- Это работает!
DECLARE
:GEOM BLOB;
BEGIN
:GEOM := HEXTORAW('010200000004000000b6f3fdd497961341c74b37097b2042418941606596961341819543bb822042416f1283c05f971341ac1c5a149d20424175931884829613410ad7a350b6204241');
UPDATE "SDE"."MYTABLE" SET "SHAPE" = SDE.ST_GeomFromWKB(:GEOM, 3405) WHERE "OBJECTID" = 1;
END;
SELECT SDE.St_AsText(SHAPE) AS SHAPE FROM "SDE"."MYTABLE" WHERE "OBJECTID" = 1
Откуда тогда "ORA-03001: unimplemented feature" при вызове через OCI именно SDE.ST_GeomFromWKB?
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production
st_shapelib.dll от ArcGIS 10 - версия библиотеки 10.0.5.2063 от 22.05.2012