Istnieją 2 stoły EMPLOYEES
i DEPARTMENTS
z department_id
jako klucz podstawowy dla DEPARTMENTS
i klucza obcego na EMPLOYEES
.PL/SQL dla pętli niejawna CURSOR
Chcę wydrukować wszystkie nazwiska pracowników, które należą do konkretnego działu. Wiem, że można to łatwo osiągnąć za pomocą kursorów JOINS lub EXPLICIT
. Pomyślałem, dlaczego nie spróbować z pętli FOR i kursorami IMPLICIT
.
Moje pytanie brzmi, czy jest poprawne pod względem składni tak, jak pisze INTO
. Jeśli tak, dlaczego nie przypisujesz żadnych wartości?
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;
Docs: https://docs.oracle.com/cloud/latest/db112/LNPLS/cursor_for_loop_statement.htm#LNPLS1155 – Vadzim
Wydajność: https : //oracle-base.com/articles/misc/implicit-vs-explicit-cursors-in-oracle-plsql – Vadzim