ORACLE 存储过程不编译

ORACLE stored procedure doesn't compile

我正在为这个查询苦苦挣扎,无法弄清楚为什么 Oracle 不编译以下存储过程, 错误是 PL/SQL: ORA-00933: comando SQL terminato erroneamente,在包含 `FROM storico_dipendente AS anag,

的行

提前致谢

保罗`

create or replace 
    PROCEDURE AVERAGE_VRE (
                p_refDate IN DATE ,
          p_level IN VARCHAR2 )
    /*
        Procedure Name: AVERAGE_VRE
        Author:         Paolo URSINI
        Date:           21 jan 2015
        Description:    this procedure compute the average amount from PAYROLL table
                        inserting into PAYROLL_CALCOLATO table.
                        The assumption is that every wage type is equally divided
                        by ALL THE ACTIVE EMPLOYEE
    */
    IS 
      FTE decimal(8,3) := 0;

    BEGIN    
      SELECT sum(percentuale_parttime) into FTE
        from storico_dipendente
        where TRUNC(data_inizio_variazione) <= p_refDate 
            and TRUNC(data_fine_variazione) >= p_refDate 
            and flag_status = 1;    

        INSERT INTO PAYROLL_CALCOLATO (
            MATRICOLA, 
            DATA_PY, 
            IMPORTO,
            ID_CODICE_VOCE,
            TM_INS,
            TM_UPD,
            ID_GRUPPO_DATI)
            SELECT 
                anag.MATRICOLA, voci.DATA_PY, (voci.sumImporto / FTE ), 
                voci.ID_CODICE_VOCE, 
                SYSDATE, 
                SYSDATE, 
                2           
            FROM storico_dipendente AS anag,
          (
            SELECT DATA_PY, ID_CODICE_VOCE, sum(IMPORTO_PY) sumImporto
              FROM PAYROLL 
              WHERE TRUNC(DATA_PY) = p_refDate
              GROUP BY DATA_PY, ID_CODICE_VOCE
          ) AS voci         
        where TRUNC(data_inizio_variazione) <= p_refDate 
            and TRUNC(data_fine_variazione) >= p_refDate 
            and flag_status = 1 and cod_livello = p_level;  

    END AVERAGE_VRE;

从两个 table/subquery 别名中删除 "AS"。虽然 Oracle 允许您将 AS 与列别名一起使用,但它不是 table 别名的有效语法。

已解决,问题出在带有关键字 AS 的别名中。 以下代码编译正确

 CREATE OR REPLACE PROCEDURE AVERAGE_VRE (
            p_refDate IN DATE ,
      p_level IN VARCHAR2 )
/*
    Procedure Name: AVERAGE_VRE
    Author:         Paolo URSINI
    Date:           21 jan 2015
    Description:    this procedure compute the average amount from PAYROLL table
                    inserting into PAYROLL_CALCOLATO table.
                    The assumption is that every wage type is equally divided
                    by ALL THE ACTIVE EMPLOYEE
*/
IS 
  FTE decimal(8,3) := 0;

BEGIN    
  SELECT sum(percentuale_parttime) into FTE
    from storico_dipendente
    where TRUNC(data_inizio_variazione) <= p_refDate 
        and TRUNC(data_fine_variazione) >= p_refDate 
        and flag_status = 1 and cod_livello = p_level;    

    INSERT INTO PAYROLL_CALCOLATO (
        MATRICOLA , 
        DATA_PY, 
        IMPORTO,
        ID_CODICE_VOCE,
        TM_INS,
        TM_UPD,
        ID_GRUPPO_DATI)
        SELECT 
            anag.MATRICOLA ,voci.DATA_PY, (voci.sumImporto / FTE ), 
            voci.ID_CODICE_VOCE, 
            SYSDATE, 
            SYSDATE, 
            2         
        FROM storico_dipendente anag,
              (
                SELECT DATA_PY, ID_CODICE_VOCE, sum(IMPORTO_PY) sumImporto
                  FROM PAYROLL 
                  WHERE TRUNC(DATA_PY) = p_refDate
                  GROUP BY DATA_PY, ID_CODICE_VOCE
              ) voci            
    where TRUNC(data_inizio_variazione) <= p_refDate 
        and TRUNC(data_fine_variazione) >= p_refDate 
        and flag_status = 1 and cod_livello = p_level;  

END AVERAGE_VRE;