2012-11-24 6 views
1

패키지오류 무시 문

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; 

패키지 BODY

PL 라인 29에서 무시/SQL 문 (단지 관련 삽입 쿼리 전)

create or replace package body PKG_PROJECT AS 
procedure SP_PREPARESALARY(v_yr in number,v_mn in number) AS 
V_EMPNO INTEGER; 
V_EMPNAME VARCHAR2(30); 
V_BASICSALARY INTEGER; 
V_DAYSPRESENT INTEGER; 
V_YEAR INTEGER; 
V_MONTH INTEGER; 
V_PF INTEGER; 
V_TAX INTEGER; 
V_MON_SAL INTEGER; 
V_NET_SAL INTEGER; 
V_MAXDAYS INTEGER; 
CURSOR EMP_VALUES IS 
SELECT EMPNO, EMPNAME, BASICSALARY, YEAR, MONTH, DAYSPRESENT 
FROM DELL_EMPLOYEE, DELL_ATTENDANCE 
WHERE EMPNO=ENO AND YEAR = V_YR AND 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 := FN_GETMAXDAYS(V_YEAR,V_MONTH); 
V_MON_SAL:= FN_GETGROSSMONTHLYSALARY(V_BASICSALARY, V_DAYSPRESENT, V_MAXDAYS); 
V_PF:= FN_GETPF(V_MON_SAL); 
V_TAX:= FN_GETTAX(V_MON_SAL,V_PF); 
V_NET_SAL:= FN_GETNETSALARY(V_MON_SAL, V_PF, V_TAX); 
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 
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; 

DELL_EMPLOYEE, DELL_ATTENDANCE, DELL_SALARY 테이블을 만들었습니다. 그러나 나는 왜 kepp이 원하지 않는 오류를 일으키는 지 모르겠다.

+0

'FN_GETNETSALARY' 함수가 패키지와 동일한 스키마에 존재하며 유효합니까? –

+0

예 jonearles !! 나를 돕는 고맙습니다 !!! –

+0

언급 한 모든 함수가 pkg_project 패키지 및 본문에 선언되었습니다. 함수 FN_GETNETSALARY (숫자의 v_gross_salary, 숫자의 v_pf, 숫자의 v_tax) return integer AS v_net_salary number; begin 이중에서 v_net_salary로 라운드 선택 (v_gross_salary- (v_pf + v_tax), 0) return v_net_salary; END FN_GETNETSALARY; –

답변

1

나는 기능이 없으므로 주석을 달거나 해당 부분을 제거하고 오류없이 패키지를 만들었습니다.

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; 

문제가 어디 있는지 쉽게 파악할 수 있도록 부분적으로 의견을 말하십시오.

+0

고맙습니다. ... 당신의 회신이 제게 많은 도움이되었습니다 .. !! 그러나 나는 너에게 조금 더 설명하고 싶다. 사실 우리가 따라야 할 몇 가지 공모가 있습니다. 마찬가지로 E.EMPNO = A.ENO 및 E.YEAR = A.V_YR AND E.MONTH = A.V_MN; 여기서 V_YR과 V_MN은 proc 매개 변수입니다. 내 ID는 citjit @ gmail입니다. com 또는 cse. soumyajit @ gmail. com –

+0

아, 그럴 수 없다면 실현할 수 없다면'E.EMPNO = A.ENO AND E.YEAR = V_YR AND E.MONTH = V_MN; ' – user75ponic

+0

thanx polppan ... !! –