Обращение извне к GDB в Oracle - ошибка записи через SDE.ST_GeomFromWKB

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
gispanorama
Новоприбывший
Сообщения: 3
Зарегистрирован: 04 дек 2015, 08:44
Репутация: 1

Обращение извне к GDB в Oracle - ошибка записи через SDE.ST_GeomFromWKB

Сообщение gispanorama » 22 сен 2017, 10:55

Вопрос не совсем по ArcGIS, а по использованию методов ArcSDE библиотеки st_shapelib.dll из OCI-приложения, работающего с Oracle, но, возможно, кто-то из форумчан сможет мне помочь...

Исходные данные.

Есть БД, в которой размещаются пространственные данные в формате 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
Значит, библиотека st_shapelib.dll прикручена корректно.


Откуда тогда "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

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Обращение извне к GDB в Oracle - ошибка записи через SDE.ST_GeomFromWKB

Сообщение trir » 22 сен 2017, 11:04


gispanorama
Новоприбывший
Сообщения: 3
Зарегистрирован: 04 дек 2015, 08:44
Репутация: 1

Re: Обращение извне к GDB в Oracle - ошибка записи через SDE.ST_GeomFromWKB

Сообщение gispanorama » 22 сен 2017, 12:48

Спасибо за полезную ссылку, но это всё проделывалось.
Думаю, если бы проблемы были с регистрацией типов или с компиляцией библиотеки, то не работало бы также и в PL/SQL. А так проблема только при обращении через OCI.

PS
Пробую на двух разных серверах с Oracle. Результат одинаковый - из SQL Developer-а отрабатывает замечательно, а из приложения - нет.
При этом на одном из серверов

Код: Выделить всё

SELECT object_name FROM user_objects WHERE status = 'INVALID';
выдает
no rows selected
а на другом, не смотря на то, что

Код: Выделить всё

EXECUTE sys.utl_recomp.recomp_serial('SDE');
отрабатывает без ошибок

Код: Выделить всё

SELECT object_name FROM user_objects WHERE status = 'INVALID';
выдает целую пачку объектов, среди которых и ST_GEOMETRY.
Но, и там, и там SDE.ST_GeomFromWKB отрабатывает нормально из SQL Developer-а, а запись BLOB через OCILobLocator - с ошибкой.

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей