Я не могу комментировать из-за меньшего количества репутации.
Ошибка NO_DATA_FOUND возникает из-за процедуры, в которой у вас есть предложение where и группировка по ..
и если нет записей с параметром "userinput" приводит к исключению.
Я бы посоветовал изменить процедуру, поскольку нам определенно не нужна группа по custname, поскольку custname является частью предложения where;
CREATE OR REPLACE PROCEDURE visitsandtotal
(
userinput IN VARCHAR2
,visits OUT NUMBER
,total OUT FLOAT
)
IS
BEGIN
SELECT COUNT(*) AS visits
,SUM(s.laborcost) AS totalcost
INTO visits
,total
FROM si.customer c
INNER JOIN si.servinv s
ON c.custname = s.custname
WHERE s.custname = userinput;
--removed group by as custname is part of where clause
END visitsandtotal;
Но для чего угодно Причина в том, что если вы настаиваете на сохранении предложения group by, вы должны явно обработать исключение NO_DATA_FOUND в процедуре visitandtotal
CREATE OR REPLACE PROCEDURE visitsandtotal
(
userinput IN VARCHAR2
,visits OUT NUMBER
,total OUT FLOAT
)
IS
BEGIN
SELECT COUNT(*) AS visits
,SUM(s.laborcost) AS totalcost
INTO visits
,total
FROM si.customer c
INNER JOIN si.servinv s
ON c.custname = s.custname
WHERE s.custname = userinput;
GROUP BY c.custname,s.custname;
-- you dont need to mention custname from both table as join is in place
EXCEPTION
WHEN no_data_found THEN
--HERE - write your exception code whatever you like to add
END visitsandtotal;