无法运行SQL更新语句

时间:2015-05-08 17:03:53

标签: sql oracle

原谅我,但我对SQL比较陌生。

我正在尝试使用我创建的函数更新我创建的表的列,但是当我运行Update语句时,没有任何反应,我只看到下划线闪烁(我假设它试图运行它) 。更新声明正在更新大约60,000个字段,所以我认为它应该花一点时间,但它已经10分钟而且没有好处。

我想知道是否有人知道下划线可能闪烁的一些一般原因。我知道这是超级将军,但我以前从未见过这个。

这是我所谈论的图像: http://i.imgur.com/Xk3kM2U.png?1

编辑:表格中有67,662条记录。 我还截取了查询并将其链接起来。

1 个答案:

答案 0 :(得分:2)

您的旧式连接在ap1 / r1对和ap2 / r2对之间没有连接条件,因此您需要为67,662 * 67,622个坐标组合调用calc_distance()函数。 distinct的使用可能是一个警告,您知道自己正在获得重复项。然后子查询与更新本身之间没有相关性,因此您需要为temproute中的每一行重复这一点。这需要一段时间。

看起来你可能不想从路线表的两份副本中查看源机场;但来自一个副本的源和目的地机场。

像(未经测试)的东西:

UPDATE temproute tr
SET distance = (
  SELECT calc_distance(ap2.latitude, ap2.longitude, ap1.latitude, ap1.longitude)
  FROM routes r
  JOIN airports ap1 ON ap1.icaoairport = r.sourceid 
  JOIN airports ap2 ON ap2.icaoairport = r.destid
  WHERE r.routeid = tr.routeid 
);

如果temproute也是route的副本,也就是行计数所暗示的,那么您可能根本不需要在子查询中直接引用路由。

但我猜测你正在做什么。