Oracle SQL中的connect by中的Sum()函数

3
我正在尝试解决oracle SQL场景。我必须找到两个地点之间所有可能的路径,并使用SQL查询计算它们之间的总距离,两个地点之间的停留次数和路径。源表包含3列,即Departure_city,Arrival_City和Distance。
我编写了一个SQL查询并找到了停留次数和路径,但我无法找到总距离。 我的查询是:
 select * from(select arrive , level-1 , sys_connect_by_path (depart ,',')   
    from travel  
    start with depart = 'Mexico'  
    connect by nocycle prior arrive=depart)  
    where arrive = 'New York';  

这里我将德里作为出发城市,将班加罗尔作为到达城市
2个回答

2

这有点棘手,因为你想要获取递归查询所采用的路径的 sum。 这个解决方案有点不寻常,但应该有效:

CREATE OR REPLACE FUNCTION prod.eval (p_equation VARCHAR2)
   RETURN NUMBER IS
   v_result NUMBER;
BEGIN
   IF LENGTH (TRIM (TRANSLATE (p_equation, '1234567890+-()*/', ' ')))
         IS NOT NULL THEN
      raise_application_error (
         -20000,
         'EVAL: Parameter contains non mathematical values');
   END IF;

   EXECUTE IMMEDIATE ' begin :1 := ' || p_equation || '; end;'
      USING OUT v_result;

   RETURN v_result;
END;
/

select * from(select arrive , 
                     level-1 , 
                     sys_connect_by_path (depart ,',') as hops
                     eval('0' || sys_connect_by_path (distance ,'+')) as distance
              from travel  
              start with depart = 'Delhi'  
              connect by nocycle prior arrive=depart)  
where arrive = 'Bangalore';

1
你可以尝试动态评估或子查询因子。看一下

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接