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_MN代码>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_MN代码>