J'essaie d'utiliser une procédure externe autonome à partir d'un curseur, de prendre une variable et de la renvoyer à la procédure, où la procédure insère les valeurs dans une autre table. Obtenir des erreursErreur de procédure autonome dans le curseur vers une table de base
PROCEDURE:
CREATE OR REPLACE PROCEDURE proc_test
(p_inn newtable.totalhours%TYPE) AS
BEGIN
p_inn := p_inn - p_inn + 1;
INSERT INTO proceduretest (value)
VALUES (p_inn);
END proc_test;
/
Le code avec des curseurs
SET SERVEROUTPUT ON
DECLARE
v_idno paydata1.idno%TYPE;
v_name paydata1.name%TYPE;
v_hrs paytran1.hourswk%TYPE;
v_hrsT paytran1.hourswk%TYPE;
v_code paydata1.jobcode%TYPE;
v_payh paydata1.payhr%TYPE;
v_sal paydata1.salary%TYPE;
v_OT NUMBER(6,2);
CURSOR payday IS
SELECT idno, name FROM paydata1
ORDER BY idno;
CURSOR paytray IS
SELECT hourswk FROM paytran1
WHERE v_idno = idno
ORDER BY idno;
CURSOR total IS
SELECT idno, name, jobcode, salary, payhr
FROM paydata1
WHERE v_idno = idno;
BEGIN
OPEN payday;
LOOP
FETCH payday INTO v_idno, v_name;
EXIT WHEN payday%NOTFOUND;
IF paytray%ISOPEN THEN
CLOSE paytray;
END IF;
OPEN paytray;
v_hrsT := 0;
LOOP
FETCH paytray INTO v_hrs;
EXIT WHEN paytray%NOTFOUND;
v_hrsT := v_hrsT + v_hrs;
END LOOP;
OPEN total;
FETCH total INTO v_idno, v_name, v_code, v_sal, v_payh;
WHILE total%FOUND LOOP
IF v_code = 'S' THEN
v_sal := v_sal/52;
DBMS_OUTPUT.PUT_LINE(v_name || ' - Total hours worked is: ' || v_hrsT);
proc_test (v_hrsT); <------------------
ELSE
IF v_hrsT > 40 THEN
v_OT := v_hrsT - 40;
v_OT := v_OT * (v_payh * 1.5);
v_OT := v_OT + (40 * v_payh);
v_sal := v_OT;
ELSE
v_sal := v_hrsT * v_payh;
END IF;
DBMS_OUTPUT.PUT_LINE(v_name || ' - Total hours worked is: ' || v_hrsT);
proc_test (v_hrsT); <---------------
END IF;
FETCH total INTO v_idno, v_name, v_code, v_sal, v_payh;
END LOOP;
CLOSE total;
CLOSE paytray;
END LOOP;
CLOSE payday;
END;
/
SET SERVEROUTPUT OFF
Je me excuse, une partie du code obtenu en désordre vers la fin, mais je l'ai dessiné des flèches à l'endroit où la procédure est appelée.
ERREURS:
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/1 PL/SQL: Statement ignored
5/1 PLS-00363: expression 'P_INN' cannot be used as an assignment
target
Quelles sont les erreurs obtenez-vous ? –
Pourquoi avez-vous trois curseurs sélectionnant à partir de la même table initié imbriqués les uns les autres? – APC
Pour référence ultérieure, il ne s'agit pas d'une procédure externe. Les ExtProcs sont quelque chose de différent. Le terme correct est autonome. – APC