Oracle spatial 使用的一些感受

         最近由于项目需求,要实现Oracle数据源,主要是Oracle Spatial 。虽然之前写过PostGIS和Sqlite的,但是对Oracle基本上算一无所知。刚开始接触的那几天,头都大了,Oracle里面的东西分的太细了,有些东西都不知道去哪找。为了使用Oracle中的mapview,费了半天总算配置成功了,结果使用起来不够人性化,那个⊙﹏⊙b汗。

     看了一堆英文材料对Oracle Spatial才算有了点了解,开始动手编码了。写完一些基本的空间数据的增删改查,以为差不多了,因为之前也写过另外两个数据源的,Sql语法也差不多,写起来还算轻车熟路。满怀希望单元测试都OK,结果刚测一个Insert,就一直报错(+_+),ORA-1461:仅能绑定要插入LONG列的LONG值。查看一下数据库表,里面根本就没有Long类型字段,将sql语句直接放到SQL/Plus中运行,又改抛ORA-01704:文字字符串过长。在网上寻觅了一下发返现,原来Oracle SQL语句长度不能超过4000字节,囧o(╯□╰)o。原来我在写插入语句时直接将Geometry对象转化为WKT格式,使用SDO_Geomtry(wkt clob,srid number default Null)方法,而测试用的一个polygon对象就超过4000了,泪奔了~~~~(>_<)~~~~ 。试了很久,最后在一个国外的帖子上看到了解决方案,使用变量绑定的方式,将字符串转化为OracleClob对象,再设置变量值就OK。下面是截取部分代码:

           OracleParameter tempPara = new OracleParameter();
            tempPara.ParameterName = paramName;
            tempPara.OracleDbType = OracleDbType.Clob;
            tempPara.Direction = ParameterDirection.Input;
            OracleClob clob = new OracleClob(orclConn);//设定为Clob,orclConn     为OracleConnection实例
           clob.Write((paraValue as string).ToCharArray(), 0, (paraValue as    string).ToCharArray().Length);//paraValue为变量实际值
                tempPara.Value = clob;

           orclComm.Parameters.Add(tempPara);//orclComm:OracleCommand实例

         测试一下,顺利过关,O(∩_∩)O~。

         顺便说一下,使用Oracle提供的数据访问组件(Oracle.DataAccess.dll)时要安装Oracle 客户端,及ODP,并且要注意ODP和Oracle的版本问题,之前没有注意,就出现了一堆问题。

        Oracle Spatial用了一下,还是很强大的。从中学到了不少东西,虽然过程是痛苦的~~

转载自:https://blog.csdn.net/hquangelina/article/details/5669598

You may also like...