Il y a 2 tables EMPLOYEES
et DEPARTMENTS
avec department_id
comme clé primaire pour DEPARTMENTS
et clé étrangère sur EMPLOYEES
.
Je souhaite imprimer tous les noms des employés appartenant à un service particulier. Je sais que cela peut être facilement réalisé par des curseurs JOINS ou EXPLICIT
. J'ai pensé pourquoi ne pas essayer avec la boucle FOR et les curseurs IMPLICIT
.
Ma question est de savoir s'il est syntaxiquement correct d'écrire INTO
comme ceci. Si oui, pourquoi n'attribue-t-il 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;
Vous n'utilisez pas INTO 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;
/
Consultez cette page: http://www.techonthenet.com/Oracle/loops/cursor_for.php .
Je ne pense pas que ce que vous essayez de faire soit valide. Décomposez cela en deux étapes: la boucle FOR et l'INTO. Vous pouvez toujours avoir un SELECT dans le FOR IN, il ne peut tout simplement pas être un INTO.