在这些表中插入了一些示例记录。我需要显示驾驶员的姓名,然后显示最长行程的行程腿数,这也意味着如果行程中行程腿最多,则这是最长的行程,此处的行程腿表示零件旅行。因此,这是我的函数,用于返回一个字符串,其中包含驾驶员和最长行程的行程腿编号。
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;”之后下面的输出显示了Adam和Frederic之间的空字符串,但这是不可能的,因为即使该驱动程序没有进行任何操作,我的字符串也应该为该行返回一个名称,后跟一个0。
LONGTRIP(L#)
------------------------------------------------------------------------------------------------------------------------------------
John Smith 5
John Doe 5
Adam Taylor 8
Frederic Jones 5
Adam Fox 4
John Lucas 5
7 rows selected.