
April 28th, 2006, 06:28 AM
|
|
Registered User
|
|
Join Date: Apr 2006
Posts: 7
Time spent in forums: 3 h 39 m 35 sec
Reputation Power: 0
|
|
|
Sqlplus trigger problem
Dear forums.devshed.com
I'm having problem with inspwork_trigger
I keep on giving me errors on compilation.
I have no idea on how to fix it.
It seem to have problem on using the inspworks() PROCEDURE.
When I run on the "set serveroutput on" I work OK.
Thank You!
By Kai
Code:
----------------
CREATE OR REPLACE TRIGGER inspwork_trigger
AFTER INSERT ON PWORKS
FOR EACH ROW
WHEN( NEW.EMPNO IS NOT NULL AND
NEW.PROJNO IS NOT NULL AND
NEW.HOURS IS NOT NULL)
DECLARE
proj_sum_hours pworks.hours%TYPE;
proj_count INTEGER;
proj_avg_hours NUMBER;
employeeNo pworks.empno%TYPE;
projectNo pworks.projno%TYPE;
employeeHours pworks.hours%TYPE;
CURSOR proj_sum_hours_cursor IS
SELECT SUM(pw2.hours)sum_hours
FROM pworks pw2
WHERE pw2.empno = :NEW.EMPNO
;
CURSOR proj_count_cursor IS
SELECT COUNT(pw3.projno)count_projno
FROM PWORKS PW3
WHERE PW3.empno = :NEW.EMPNO
;
BEGIN
employeeNo := :NEW.EMPNO;
projectNo := :NEW.PROJNO;
employeeHours := :NEW.HOURS;
open proj_sum_hours_cursor;
FETCH proj_sum_hours_cursor INTO proj_sum_hours;
close proj_sum_hours_cursor;
open proj_count_cursor;
FETCH proj_count_cursor INTO proj_count;
close proj_count_cursor;
proj_avg_hours := proj_sum_hours / proj_count;
execute inspworks('000340', 'OP2010', 50);
END inspwork_trigger;
.
RUN
----------------
Warning: Trigger created with compilation errors.
SQL>
SQL>
SQL>
SQL> show error;
Errors for TRIGGER INSPWORK_TRIGGER:
LINE/COL
ERROR
33/17
PLS-00103: Encountered the symbol "INSPWORKS" when expecting one of the
following:
:= . ( @ % ; immediate
The symbol ":=" was substituted for "INSPWORKS" to continue.
----------------
set serveroutput on
DECLARE
proj_sum_hours pworks.hours%TYPE;
proj_count INTEGER;
proj_avg_hours NUMBER;
CURSOR proj_sum_hours_cursor IS
SELECT SUM(pw2.hours)sum_hours
FROM pworks pw2
WHERE pw2.empno = '000340'
;
CURSOR proj_count_cursor IS
SELECT COUNT(pw3.projno)count_projno
FROM PWORKS PW3
WHERE PW3.empno = '000340'
;
BEGIN
open proj_sum_hours_cursor;
FETCH proj_sum_hours_cursor INTO proj_sum_hours;
close proj_sum_hours_cursor;
open proj_count_cursor;
FETCH proj_count_cursor INTO proj_count;
close proj_count_cursor;
proj_avg_hours := proj_sum_hours / proj_count;
exec inspworks('000340', 'OP2010', proj_avg_hours);
DBMS_OUTPUT.PUT_LINE
('PROJ SUM HOURS: '||proj_sum_hours);
DBMS_OUTPUT.PUT_LINE
('PROJ COUNT: '||proj_count);
DBMS_OUTPUT.PUT_LINE
('PROJ AVG HOURS: '||proj_avg_hours);
END;
.
/
----------------
CREATE OR REPLACE PROCEDURE inspworks
( inEmployeeNo IN Pworks.empno%TYPE,
inProjectNo IN pworks.projno%TYPE,
inEmployeeHours pworks.hours%TYPE) AS
BEGIN
DECLARE
employeeNo pworks.empno%TYPE;
projectNo pworks.projno%TYPE;
employeeHours pworks.hours%TYPE;
BEGIN
employeeNo := inEmployeeNo;
projectNo := inProjectNo;
employeeHours := inEmployeeHours;
INSERT INTO pworks pw
(pw.empno, pw.projno, pw.hours)
VALUES (employeeNo, projectNo, employeeHours);
UPDATE pworks pw
SET pw.hours = pw.hours*(40/(
SELECT SUM(pw2.hours)
FROM pworks pw2
WHERE pw2.empno =employeeNo
)
)
WHERE pw.empno = employeeNo
;
END;
END;
.
/
---------------
|