0

ST_GEOMETRY 空間タイプで ArcSDE と Oracle を使用しています。SqlGeoemtry 型を使用して C# コードを書いています。私が欲しいのは、交差を要求できるが、wkt の代わりに wkb を使用できるようにすることです。wktで動作することはわかっていますが、機能に多くの頂点がある場合、Oracleから文字列リテラルが大きすぎるというエラーが表示されます(2000文字程度だと思います)。また、その大きな文字列を CLOB にチャンクし、チャンクを送信して交差操作を機能させることができることも知っています。

私が望むのは、バイナリ形式を使用して、これらの問題をすべて回避することです。しかし、構文に問題があります。wktで機能するものは次のとおりです。

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromtext('{1}', 3071)) = 1", selectionLayerName, unionedBuffer.ToString());

現在機能しないものは次のとおりです。

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromwkb('{1}', 3071)) = 1", selectionLayerName, unionedBuffer.STAsBinary());

Obstacle の苦情は ORA-29900 です: operator binding does not exist バイナリ形式で受信機能を Oracle に受け入れさせるにはどうすればよいですか?

4

1 に答える 1

0

私はそれを考え出した。Blob として Oracle パラメータを作成し、SqlGeometry 呼び出しからバイト配列をロードする必要がありました。

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromwkb(:THEBLOB, 3071)) = 1", selectionLayerName);
OracleParameter param = oracleCommand.Parameters.Add(new OracleParameter(":THEBLOB", OracleDbType.Blob));
param.Value = unionedBuffer.STAsBinary().Value;
于 2016-12-21T16:06:06.107 に答える