PL/SQL FOR-SCHLEIFE IMPLIZITE CURSOR
Gibt es 2 Tabellen EMPLOYEES
und DEPARTMENTS
mit department_id
als Primärschlüssel für DEPARTMENTS
- und foreign key auf EMPLOYEES
.
Will ich drucken alle Namen der Mitarbeiter, gehören zu einer bestimmten Abteilung. Ich weiß, es kann einfach erreicht werden durch Beitritt oder EXPLICIT
Cursor.
Ich dachte, warum nicht versuchen, mit FOR-Schleife und eine IMPLICIT
Cursor.
Meine Frage ist, ob es syntaktisch korrekt zu schreiben INTO
wie diese. Wenn dem so ist, warum ist nicht die Zuordnung aller Werte?
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;
InformationsquelleAutor qasim.hasnain | 2013-04-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht IN einem impliziten cursor:
INTO departments
bevor Sie diesen code ausführen, richtig?Nein IN -- Sie Referenz die Werte, die vom cursor zurückgegeben werden, wie cursor_name.column_name
meine Frage immer noch bleibt, wenn es nicht richtig verwenden, warum dann ist es nicht zu geben irgendwelche Fehler....und bin ich traurig, dass der cursor steht explizite und ich kann speichern die Werte über die variable " i " der FOR-SCHLEIFE.....
Ich weiß nicht, warum es nicht einen Fehler auslösen. Jedoch explizite Cursor werden in der Regel abgeraten, in der situation, in der implizite Cursor kann auch verwendet werden, als Sie benötigen mehr code und sind daher weniger fehleranfällig und schwieriger zu unterstützen, und sind langsamer in vielen Fällen. Also, nutzen Sie einfach die korrekte implizite cursor-syntax und Ihr code funktioniert.
InformationsquelleAutor David Aldridge
Überprüfen Sie diese Seite: http://www.techonthenet.com/oracle/loops/cursor_for.php.
Ich glaube nicht, dass das, was Sie zu tun versuchen ist gültig. Brechen diese sich in zwei Schritte: die FOR-Schleife und der IN. Man kann noch WÄHLEN, in der "IN", es kann einfach nicht sein.
InformationsquelleAutor Robert Harvey