您的位置:首页 > 数据库 > Oracle

oracle----buffer、图形相交、使用body中的函数、确认表存在,导入文本入库

2017-03-31 17:26 330 查看
这次的java程序,需要新建一张表,所以需要先确认表名是否存在,存在的话就删除然后新建,不存在就新建,语句可以用下面的:

select * from user_tables where table_name='TABLENAME'; 

其中tablename是你要查询的表名,必须全部大写,如果查询结果的行数大于0,就说明这张表存在。

如果需要调用oracle已经存在的包,以及包中的函数,可以直接在select中使用



比如,我要调用这个get_infuffer_ratio方法,需要传入2个geometry对象,可以这样用

select b.link_pid, NAVI_SHAPE_MATCH.GET_INBUFFER_RATIO(a.geometry, b.geometry) as "长度相似度" 

from rd_link a, rd_link  b 

where (a.link_pid = 15667280 and b.mesh_id=a.mesh_id)

返回rd_link中id=15667280这个link所在mesh 的link和15667280之间的长度相似度。

oracle中的对象有geometry,可以使用geometry进行一些图形操作计算,比如生成buffer

select link_pid, SDO_GEOM.SDO_BUFFER(a.geometry, 8, 0.5, 'unit= M') as GEOMETRY  

from rd_link a where a.link_pid=111

意思是在rd_link中找link_pid=111的数据生成buffer,这个buffer作为新对象的geometry。

buffer函数的参数 SDO_GEOM.SDO_BUFFER(a.geometry, b,c, d) ,a是表名,代表数据来自于哪张表的数据

b是buffer的宽度值,c是误差范围,d是数据值的单位。

oracle中对象计算相交关系,可以这样写:

select a.* from rd_link a ,(select * from rd_link where link_pid=1) b where    sdo_Geom.Relate(a.geometry, 'ANYINTERACT', b.geometry, 0.5 ) = 'TRUE'

意思是找到和link_pid=1的数据相交的数据

 sdo_Geom.Relate(a.geometry,b, c.geometry, d ) = 'TRUE'

a和c是geometry对象,是2个geometry对象关系的判断原则,可以去网上找找,有很多,相交就是ANYINTERACT,d是误差值。最后结果等于‘TRUE’就是相交的,'FALSE'就是不想交的。

java也可以执行事务操作,比如给body的函数设定参数,一次设定,只对一次会话生效。比如:

        sql = "begin \n" +

                "NAVI_SHAPE_MATCH.C_BUF_DISTANCE  := 5;\n" + 

                "end;";

最后执行这个sql,在使用函数时,参数就变为了设定值



oracle如果要执行 跨数据库的查询,需要建立database_link,比如一个数据在192.168.1.200,一个在192.168.1.201

在plsql中,找到database_link右击,选择新建



填入相关的参数,也就是另一个数据的用户名密码地址



建好后,就可以使用了。
使用的时候,就是 表名@db_link名字,例如
select *
from rd_link@dblink_155 where link_pid=1

把文本导入oracle数据库,在plsql中点击工具,选择文本导入器。



打开文本文件,注意下分隔符,导入行数,字段数这些要素设置,一般就默认就行



在A处,填写登录服务器的用户名,B处填写数据需要插入的表名,C的地方选择你原始数据的列,D是c这列插入B表的哪个字段



都设置完成后,点击导入,就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: