我创建这个存储过程是为了显示一个省的平均值案例。当它获得一个有效的省(与省表比较)作为参数时,cont变量被提升。如果未引发cont=0,则->异常。如果它被提出,那么->继续te程序,它应该输出我用dbms\u output.put\u行写的行,它必须显示省的名称和案例数。不管怎样,它不起作用,我不明白为什么。我得到了ora-06550和ora-00905。
CREATE OR REPLACE PROCEDURE Media_Casi_totali(Provincia IN PROVINCE.denominazione_provincia%TYPE)
AS
BEGIN
DECLARE
Media_dei_casi_totali COVID_PROVINCE.Totale_Casi%TYPE;
Cont INTEGER;
Provincia_Errata EXCEPTION;
BEGIN
select count(*| INT) Cont
from PROVINCE P INNER JOIN COVID_PROVINCE CP ON P.CODICE_PROVINCIA = CP.CODICE_PROVINCIA
where p.denominazione_provincia=Provincia;
IF (cont=0) then
Raise Provincia_Errata;
ELSE
select ROUND(AVG(CP.TOTALE_CASI),3) INTO Media_dei_casi_totali
FROM PROVINCE P INNER JOIN COVID_PROVINCE CP ON P.CODICE_PROVINCIA=CP.CODICE_PROVINCIA
WHERE P.DENOMINAZIONE_PROVINCIA=Provincia;
DBMS_OUTPUT.PUT_LINE('Media dei casi totali' || 'relativi alla provincia di' || Provincia || ':' || Media_dei_casi_totali);
END IF;
EXCEPTION
WHEN Provincia_Errata THEN
DBMS_OUTPUT.PUT_LINE('La Provincia selezionata non esiste');
END;
END Media_Casi_totali;
2条答案
按热度按时间yeotifhr1#
无效语法,此处为:
应该是
bjp0bcyl2#
当然,在用没有很好编码的cont变量解决问题之后,我会使它变得更简单。
更新缺少一个结尾
那就开始吧
我更喜欢用raise\u application\u error,因为我相信你的情况更复杂。如果有关联的pragma\u exception\u init来控制特定于oracle的异常,我会使用exception。如果是逻辑异常,则要在计数器为0时引发错误。
测试用例
当做