2014-05-14 96 views
3

我正在嘗試解決oracle SQL的情況。我必須找到兩個地點之間的所有可能路徑,並使用SQL查詢來計算它們之間的總距離,兩個地點之間的停靠點的數量。源表包含3 columns,即Departure_city , Arrival_City and DistanceOracle SQL中的Sum()連接

我寫了一個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'; 

這裏我把DelhiDeparture_cityBangaloreArrival city

回答

1

這是有點棘手的,因爲你想得到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';