首页 > 解决方案 > 存储过程 ora-06550 和 ora-00905

问题描述

我创建了这个存储过程来显示一个省的平均案例。当它获得一个有效的省份(与 PROVINCE 表比较)作为参数时,将引发 cont 变量。如果未引发 cont=0 则 -> 异常。如果它被提出然后 -> 继续执行 te 程序,它应该输出我用DBMS_OUTPUT.PUT_LINE写的行,它必须显示省份名称和案件数量。无论如何,它不起作用,我无法理解为什么。我得到 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;

标签: sqloraclestored-proceduresdatagrip

解决方案


无效的语法,这里:

select count(*| INT) Cont

应该

select count(*) into Cont

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 (*)
        INTO 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;

推荐阅读