2016-10-26 7 views
-1

J'apprends PLSQL depuis 3 mois. Maintenant, je pratique des curseurs explicites. J'ai écrit un simple curseur et j'ai utilisé l'attribut% ROWCOUNT pour interroger 5 rangées d'employés mais je n'ai reçu que 4 employés à l'écran. Pourquoi?Pourquoi n'ai-je pas le nombre exact de lignes que j'ai récupérées?

SET SERVEROUTPUT ON 
DECLARE 
    CURSOR cur_emp IS 
    SELECT e.employee_id, e.last_name, d.department_id, d.department_name 
    FROM employees e 
    JOIN departments d 
    ON (e.department_id = d.department_id); 

    v_emp_id employees.employee_id%TYPE; 
    v_emp_name employees.last_name%TYPE; 
    v_dept_id departments.department_id%TYPE; 
    v_dept_name departments.department_name%TYPE; 
BEGIN 
    OPEN cur_emp; 
    LOOP 
     FETCH cur_emp 
     INTO v_emp_id, v_emp_name, v_dept_id, v_dept_name; 
     EXIT WHEN cur_emp%ROWCOUNT = 5; 
     DBMS_OUTPUT.PUT_LINE('EMPLOYEE ID: ' || v_emp_id || ' EMPLOYEE: ' || 
     v_emp_name || ' DEPARTMENT ID: ' || v_dept_id || ' DEPARTMENT NAME: ' || 
     v_dept_name); 
    END LOOP; 
    CLOSE cur_emp; 
END; 
/

image

Répondre

1

La boucle vérifie d'abord la condition, pour ainsi écrire 4 employés, vérifiez le nombre de lignes de la suivante et sortir de la boucle, vous devez mettre ROWCOUNT> 5, ROWCOUNT = 6 ou déplacer le EXIT WHEN condition à après votre appel à DBMS_OUTPUT.

+0

Merci monsieur pour votre aide !!! J'ai compris maintenant. – Rattlesnake