PL / SQL POUR BOUCLE CURSEUR IMPLICITE
il y a 2 tables EMPLOYEES
et DEPARTMENTS
avec department_id
comme clé primaire pour DEPARTMENTS
et clé étrangère sur EMPLOYEES
.
je veux imprimer tous les noms d'employés qui appartiennent à un ministère particulier. Je sais qu'il peut être facilement atteint par jointures ou EXPLICIT
curseurs.
J'ai pensé pourquoi ne pas essayer avec pour boucle et un IMPLICIT
curseurs.
ma question Est si c'est syntaxiquement correct d'écrire INTO
comme ce. Dans l'affirmative, pourquoi n'attribue-t-on aucune valeur?
DECLARE
emp_dept_id employees.department_id%TYPE;
emp_emp_id employees.employee_id%TYPE;
emp_last_name employees.last_name%TYPE;
dept_dept_id departments.department_id%TYPE;
dept_dept_name departments.department_name%TYPE;
v_count number DEFAULT 0;
BEGIN
FOR i IN (SELECT DISTINCT department_id, department_name
INTO dept_dept_id, dept_dept_name
FROM departments)
LOOP
--v_COUNT := v_COUNT + 1;
DBMS_OUTPUT.PUT_LINE('HELLO'||dept_dept_id||' '||dept_dept_name);
FOR j IN (SELECT employee_id, last_name
INTO emp_emp_id, emp_last_name
FROM employees)
--WHERE department_id=dept_dept_id)
LOOP
DBMS_OUTPUT.PUT_LINE(emp_emp_id||' '||emp_last_name);
v_COUNT := v_COUNT + 1;
END LOOP;
END LOOP;
DBMS_OUTPUT.PUT_LINE(v_COUNT);
END;
2 réponses
que vous n'utilisez pas avec un curseur implicite:
DECLARE
emp_dept_id employees.department_id%TYPE;
emp_emp_id employees.employee_id%TYPE;
emp_last_name employees.last_name%TYPE;
v_count number DEFAULT 0;
BEGIN
FOR i IN (SELECT DISTINCT department_id, department_name
FROM departments)
LOOP
--v_COUNT := v_COUNT + 1;
DBMS_OUTPUT.PUT_LINE('HELLO'||i.department_id||' '||i.department_name);
FOR j IN (SELECT employee_id, last_name
INTO emp_emp_id, emp_last_name
FROM employees)
--WHERE department_id=i.department_id)
LOOP
DBMS_OUTPUT.PUT_LINE(emp_emp_id||' '||emp_last_name);
v_COUNT := v_COUNT + 1;
END LOOP;
END LOOP;
DBMS_OUTPUT.PUT_LINE(v_COUNT);
END;
/
vérifier cette page: http://www.techonthenet.com/oracle/loops/cursor_for.php .
Je ne pense pas que ce que vous essayez de faire soit valable. Séparez ceci en deux étapes: la boucle FOR et la boucle INTO. Vous pouvez toujours avoir un SELECT dans le FOR IN, ça ne peut pas être un INTO.