Stored procedures 第29行错误:PL/SQL:语句被忽略

Stored procedures 第29行错误:PL/SQL:语句被忽略,stored-procedures,plsql,Stored Procedures,Plsql,套餐 create or replace package PKG_PROJECT AS type cur IS REF CURSOR; procedure SP_PREPARESALARY(v_yr in number,v_mn in number); END PKG_PROJECT; 包体 在第29行忽略PL/SQL语句(就在相关insert查询之前) 创建了DELL_员工、DELL_考勤、DELL_工资表。但我不知道kepp为什么会出现不必要的错误。我没有你的函数,所以我已经注释或删除了该

套餐

create or replace package PKG_PROJECT AS
type cur IS REF CURSOR;
procedure SP_PREPARESALARY(v_yr in number,v_mn in number);
END PKG_PROJECT;
包体

在第29行忽略PL/SQL语句(就在相关insert查询之前)


创建了DELL_员工、DELL_考勤、DELL_工资表。但我不知道kepp为什么会出现不必要的错误。

我没有你的函数,所以我已经注释或删除了该部分,并创建了你的包,没有任何错误

CREATE OR REPLACE PACKAGE BODY PKG_PROJECT
AS
   PROCEDURE SP_PREPARESALARY (v_yr IN NUMBER, v_mn IN NUMBER)
   AS
      V_EMPNO         VARCHAR2(30);
      V_EMPNAME       VARCHAR2(30);
      V_BASICSALARY   NUMBER;
      V_DAYSPRESENT   NUMBER;
      V_YEAR          NUMBER;
      V_MONTH         NUMBER;
      V_PF            NUMBER;
      V_TAX           NUMBER;
      V_MON_SAL       NUMBER;
      V_NET_SAL       NUMBER;
      V_MAXDAYS       NUMBER;

      CURSOR EMP_VALUES
      IS
         SELECT E.EMPNO,
                E.EMPNAME,
                E.BASICSALARY,
                E.YEAR,
                E.MONTH,
                E.DAYSPRESENT
           FROM DELL_EMPLOYEE E, DELL_ATTENDANCE A
          WHERE E.EMPNO = A.ENO AND E.YEAR = V_YR AND E.MONTH = V_MN;

   BEGIN
      OPEN EMP_VALUES;

      LOOP
         FETCH EMP_VALUES
            INTO V_EMPNO,
                 V_EMPNAME,
                 V_BASICSALARY,
                 V_YEAR,
                 V_MONTH,
                 V_DAYSPRESENT;

         EXIT WHEN EMP_VALUES%NOTFOUND;
         V_YEAR := V_YR;
         V_MONTH := V_MN;
         V_MAXDAYS := 0;
--         V_MON_SAL :=
--            FN_GETGROSSMONTHLYSALARY (V_BASICSALARY,
--                                      V_DAYSPRESENT,
--                                      V_MAXDAYS);
         V_PF := 0;
         V_TAX := 0;
         V_NET_SAL := 0;

--         INSERT INTO DELL_SALARY (EMPNO,
--                                  YEAR,
--                                  MONTH,
--                                  EMPNAME,
--                                  DAYSPRESENT,
--                                  BASICSALARY,
--                                  MONTHSALARY,
--                                  PF,
--                                  TAX,
--                                  NETSALARY)
--              VALUES (V_EMPNO,
--                      V_YEAR,
--                      V_MONTH,
--                      V_EMPNAME,
--                      V_DAYSPRESENT,
--                      V_BASICSALARY,
--                      V_MON_SAL,
--                      V_PF,
--                      V_TAX,
--                      V_NET_SAL);
      END LOOP;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
      null;
--         UPDATE DELL_SALARY
--            SET EMPNAME = V_EMPNAME,
--                DAYSPRESENT = V_DAYSPRESENT,
--                BASICSALARY = V_BASICSALARY,
--                MONTHSALARY = V_MON_SAL,
--                PF = V_PF,
--                TAX = V_TAX,
--                NETSALARY = V_NET_SAL
--          WHERE EMPNO = V_EMPNO AND YEAR = V_YEAR AND MONTH = V_MONTH;
   END SP_PREPARESALARY;
END PKG_PROJECT;

尝试逐部分注释,以确定问题所在,这样您可以轻松找到问题。

我没有您的功能,因此我已注释或删除了该部分,并创建了您的包,没有任何错误

CREATE OR REPLACE PACKAGE BODY PKG_PROJECT
AS
   PROCEDURE SP_PREPARESALARY (v_yr IN NUMBER, v_mn IN NUMBER)
   AS
      V_EMPNO         VARCHAR2(30);
      V_EMPNAME       VARCHAR2(30);
      V_BASICSALARY   NUMBER;
      V_DAYSPRESENT   NUMBER;
      V_YEAR          NUMBER;
      V_MONTH         NUMBER;
      V_PF            NUMBER;
      V_TAX           NUMBER;
      V_MON_SAL       NUMBER;
      V_NET_SAL       NUMBER;
      V_MAXDAYS       NUMBER;

      CURSOR EMP_VALUES
      IS
         SELECT E.EMPNO,
                E.EMPNAME,
                E.BASICSALARY,
                E.YEAR,
                E.MONTH,
                E.DAYSPRESENT
           FROM DELL_EMPLOYEE E, DELL_ATTENDANCE A
          WHERE E.EMPNO = A.ENO AND E.YEAR = V_YR AND E.MONTH = V_MN;

   BEGIN
      OPEN EMP_VALUES;

      LOOP
         FETCH EMP_VALUES
            INTO V_EMPNO,
                 V_EMPNAME,
                 V_BASICSALARY,
                 V_YEAR,
                 V_MONTH,
                 V_DAYSPRESENT;

         EXIT WHEN EMP_VALUES%NOTFOUND;
         V_YEAR := V_YR;
         V_MONTH := V_MN;
         V_MAXDAYS := 0;
--         V_MON_SAL :=
--            FN_GETGROSSMONTHLYSALARY (V_BASICSALARY,
--                                      V_DAYSPRESENT,
--                                      V_MAXDAYS);
         V_PF := 0;
         V_TAX := 0;
         V_NET_SAL := 0;

--         INSERT INTO DELL_SALARY (EMPNO,
--                                  YEAR,
--                                  MONTH,
--                                  EMPNAME,
--                                  DAYSPRESENT,
--                                  BASICSALARY,
--                                  MONTHSALARY,
--                                  PF,
--                                  TAX,
--                                  NETSALARY)
--              VALUES (V_EMPNO,
--                      V_YEAR,
--                      V_MONTH,
--                      V_EMPNAME,
--                      V_DAYSPRESENT,
--                      V_BASICSALARY,
--                      V_MON_SAL,
--                      V_PF,
--                      V_TAX,
--                      V_NET_SAL);
      END LOOP;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
      null;
--         UPDATE DELL_SALARY
--            SET EMPNAME = V_EMPNAME,
--                DAYSPRESENT = V_DAYSPRESENT,
--                BASICSALARY = V_BASICSALARY,
--                MONTHSALARY = V_MON_SAL,
--                PF = V_PF,
--                TAX = V_TAX,
--                NETSALARY = V_NET_SAL
--          WHERE EMPNO = V_EMPNO AND YEAR = V_YEAR AND MONTH = V_MONTH;
   END SP_PREPARESALARY;
END PKG_PROJECT;

试着一部分一部分地注释,以确定问题在哪里,这样你就可以很容易地找到问题。

函数
FN_GETNETSALARY
是否与包存在相同的模式,并且它是否有效?是的,jonearles!!谢谢你帮助我!!!所有提到的函数都已在pkg_项目包和正文中声明…例如函数FN_GETNETSALARY(v_gross_salary in number,v_pf in number,v_tax in number)返回整数作为v_net_salary number;开始从dual中选择一轮(v_gross_salary-(v_pf+v_tax),0)到v_net_salary;返回v_净工资;结束FN_GETNETSALARY;函数
FN_GETNETSALARY
是否与包存在于同一架构中,并且它是否有效?是的,jonearles!!谢谢你帮助我!!!所有提到的函数都已在pkg_项目包和正文中声明…例如函数FN_GETNETSALARY(v_gross_salary in number,v_pf in number,v_tax in number)返回整数作为v_net_salary number;开始从dual中选择一轮(v_gross_salary-(v_pf+v_tax),0)到v_net_salary;返回v_净工资;结束FN_GETNETSALARY;thanx polppan…你的回答对我帮助很大。。!!但我想再给你解释一下。实际上,我们需要遵循一些共识,同样地,E.EMPNO=A.ENO和E.YEAR=A.V_yer和E.MONTH=A.V_MN;这里V_YR和V_MN只不过是proc参数。我的id是citjit@gmail。com或cse。soumyajit@gmail。我没有意识到,如果是这样的话,你可以把E.EMPNO=A.ENO,E.YEAR=V_YR,E.MONTH=V_MNthanx polppan…你的回复对我帮助很大。。!!但我想再给你解释一下。实际上,我们需要遵循一些共识,同样地,E.EMPNO=A.ENO和E.YEAR=A.V_yer和E.MONTH=A.V_MN;这里V_YR和V_MN只不过是proc参数。我的id是citjit@gmail。com或cse。soumyajit@gmail。我没有意识到,如果是这样的话,你可以把E.EMPNO=A.ENO,E.YEAR=V_YR,E.MONTH=V_MN