免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2657 | 回复: 5
打印 上一主题 下一主题

一个SQL查询的问题:通过OID得到数据 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-30 16:05 |只看该作者 |倒序浏览

  1. 我现在要处理下面的情况,大家有什么好的建议:

  2. Oracle数据库中有如下的表
  3. OID NOT NULL NUMBER(3
  4. GEOMETRY NOT NULL MDSYS.SDO_GEOMETRY
  5. STRINGFIELD VARCHAR2(10)
  6. DOUBLEFIELD NUMBER(25,
  7. DOUBLEFIELD2 NUMBER(25,
  8. BLOBFIELD BLOB

  9. OID是主键,用户给了我一堆OID(可能很多,可能很少,不一定)
  10. 我要得到这些OID所对应的GEOMETRY对象的数据信息,当然,速度一定要快,
  11. 怎样构造这个SQL语句呀!

  12. 请大家一定帮忙,谢谢  
复制代码
[/quote]

论坛徽章:
0
2 [报告]
发表于 2003-07-30 17:44 |只看该作者

一个SQL查询的问题:通过OID得到数据

select …… from table_name where oid in(……)

论坛徽章:
0
3 [报告]
发表于 2003-07-30 19:12 |只看该作者

一个SQL查询的问题:通过OID得到数据

select …… from table_name where oid in(……)

这个能处理比较小的数据,通过构造in语句来实现,
比如:
select * from table_name where oid in(1,2,62,44);
但是如果是很多数据了,比如有1000个OID,那就不好了吧!

不知道我的理解是不是正确的,望指教

论坛徽章:
0
4 [报告]
发表于 2003-07-30 19:43 |只看该作者

一个SQL查询的问题:通过OID得到数据

呵呵,那倒是
你可以考虑建一个临时表

  1. Create GLOBAL temporary table oid_tmp(oid number(3)) on commit delete rows;

复制代码

然后把用户提供的oid插入
再用join把数据取出来

  1. select t.* from table_name t,oid_tmp where oid_tmp.oid = t.oid
复制代码

论坛徽章:
0
5 [报告]
发表于 2003-07-30 20:45 |只看该作者

一个SQL查询的问题:通过OID得到数据

有其他更方便的办法吗?

论坛徽章:
0
6 [报告]
发表于 2003-07-30 22:57 |只看该作者

一个SQL查询的问题:通过OID得到数据


  1. CREATE TABLE cola_markets (
  2. mkt_id NUMBER PRIMARY KEY,
  3. name VARCHAR2(32),
  4. shape MDSYS.SDO_GEOMETRY);

  5. declare
  6. i number;
  7. begin
  8. i :=100;
  9. while i<100000 loop
  10. i:= i+1;
  11. INSERT INTO cola_markets VALUES(
  12. i,
  13. 'cola_a',
  14. MDSYS.SDO_GEOMETRY(
  15. 2003, -- 2-dimensional polygon
  16. NULL,
  17. NULL,
  18. MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
  19. MDSYS.SDO_ORDINATE_ARRAY(1,1, i,i) -- only 2 points needed to
  20. -- define rectangle (lower left and upper right) with
  21. -- Cartesian-coordinate data
  22. )
  23. );
  24. end loop;
  25. exception
  26.    when no_data_found then
  27.    NULL;
  28. end;

  29. Create GLOBAL temporary table oid_tmp(oid number  PRIMARY KEY) on commit delete rows;

  30. declare
  31. i number;
  32. begin
  33. i:= 100;
  34. while i<4000 loop
  35. i:= i+1;
  36. insert into oid_tmp(OID) values(i);
  37. end loop;
  38. end;

  39. select * from cola_markets L ,oid_tmp R where L.mkt_id =  R.OID;
  40. commit
复制代码


上面是实现代码和测试代码,
临时表看来是一个不错的方法,多谢rollingpig兄
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP