Update高难问题又来了。!!(跟上次差不多!)

jk3278jk 2004-10-29 04:48:06

为了更新方便及速度,现在将表poibaseinfo(无索引)复制一个为t_temp表(有索引) ,然后从t_temp读取,后再更新poibaseinfo中的内容。


poibaseinfo表

nid strcitycode strinfotype strname strTransferTation dlatitude dlongitude
------------------------------------------------------------------------------------------
679411 010 G12 草桥欣园 39.83933900 116.38038800
679411 010 G12 菊园 39.8393000 116.38030000



要求将更新数据库中每条记录的 strTransferTation 字段,条件是dlatitude(经度) dlongitude(纬度)此记录为100米范围内strname的记录名称的记录找出然后写入 strTransferTation .

查找100米范围的语句给出:
以查找 草桥欣园 的100米内记录为例:

select * from t_temp where (ABS(39.83933900 - dlongitude)+ABS(116.38038800- dlatitude))<=0.001




要求最后结果橡这样:


nid strcitycode strinfotype strname strTransferTation dlatitude dlongitude
------------------------------------------------------------------------------------------
679411 010 G12 草桥欣园 草桥欣园 菊园 39.83933900 116.38038800
679411 010 G12 菊园 草桥欣园 菊园 39.8393000 116.38030000



...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzszp 2004-10-29
  • 打赏
  • 举报
回复
create or replace function f_con_str_2(v_pk in number)
return varchar2 is
str_return varchar2(200);
v_11 number;
v_22 number;
cursor c_str(v_l number,v_2 number) is from t_temp where (ABS(v_1- dlongitude)+ABS(v_2- dlatitude))<=0.001;
begin
select dlatitude,dlongitude into v_11,v_22 from t_temp where pk=v_pk;--这里要通过传入的主键来进行检索,
for str_temp in c_str(v_11,v_22) loop
str_return:=str_return||' '||str_temp.strname;
end loop;
return str_return;
exception when others
null;
end f_con_str_2;
/

ORARichard 2004-10-29
  • 打赏
  • 举报
回复
看不懂
jk3278jk 2004-10-29
  • 打赏
  • 举报
回复
老大帮帮忙。行吗?别人都快下斑了。我还得弄出来这个才能走啊。。
jk3278jk 2004-10-29
  • 打赏
  • 举报
回复
这个问题本来我已经用java程序搞定了。程序已经写出来了。但跑了一个java程序,因为数据量很大,速度很慢。估计要20个小时才能跑完。

所以还是想在oralce中弄。

我原来以为java是万能的。现在。。。 叹!!!慢。。
jk3278jk 2004-10-29
  • 打赏
  • 举报
回复
怎么改。老大,麻烦改一下好吗?我oracle不行啊。
bzszp 2004-10-29
  • 打赏
  • 举报
回复
把那个函数改一下就行了。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧