почему моя функция pl sql возвращает пустую строку? - PullRequest
0 голосов
/ 09 мая 2020

Итак, вот концептуальная модель conceptual model

В эти таблицы вставлены некоторые образцы записей. Мне нужно отобразить имя водителя, за которым следует количество этапов самой длинной поездки, что также означает, что если поездка имеет наибольшее количество этапов, это самая длинная поездка в этом контексте, этапы поездки здесь означают части поездки. Итак, это моя функция - возвращать строку, содержащую водителя и номер участка самой длинной поездки.

CREATE OR REPLACE FUNCTION LONGTRIP(DLNUM driver.L#%type) 

RETURN VARCHAR2 IS



mostrip NUMBER;

driveName VARCHAR(100);

FinalANS VARCHAR(100);



BEGIN

SELECT *

INTO mostrip

FROM (SELECT COUNT(leg#) 

     FROM TRIP

      INNER JOIN TRIPLEG USING(T#)

      WHERE L# = DLNUM

      GROUP by T#

      ORDER by COUNT(leg#) desc) T

WHERE ROWNUM = 1 ;



select name into driveName

FROM TRKEMPLOYEE,DRIVER

WHERE TRKEMPLOYEE.E# =DRIVER.E#

AND DRIVER.L# = DLNUM;





FinalANS := driveName  || ' '|| nvl(mostrip, 0); 



RETURN FinalANS;



END LONGTRIP;

/

show error;



SELECT LONGTRIP(L#) FROM DRIVER;

Итак, после выполнения запроса выбора «SELECT LONGTRIP (L #) FROM DRIVER;» выходные данные ниже показывают пустую строку между Адамом и Фредери c, но это невозможно, потому что моя строка должна возвращать имя, за которым следует 0 для этой строки, даже если этот драйвер не совершал никаких поездок.

   LONGTRIP(L#)
    ------------------------------------------------------------------------------------------------------------------------------------
    John Smith 5
    John Doe 5
    Adam Taylor 8

    Frederic Jones 5
    Adam Fox 4
    John Lucas 5

    7 rows selected.
...