PLS-00302: Komponente deklariert werden müssen - Nicht in der Lage zu beheben
Habe ich versucht, das unter-Programm in der SQL developer und mit Blick auf einige Probleme:
declare
cursor emp_complex_cur is
select e.fname,d.dlocation
from employee e, dept_location d
where e.dno=d.dnumber;
emp_max_id integer;
type emp_complex_rec is record(rname employee.fname%type,rlocation dept_location.dlocation%type);
begin
open emp_complex_cur;
for emp_complex_rec in emp_complex_cur loop
fetch emp_complex_cur into emp_complex_rec;
dbms_output.put_line('The employee id is: '||emp_complex_rec.rname||' and the employee''s location is '||emp_complex_rec.rlocation);
close emp_complex_cur;
end;
Bin ich immer die Fehler, um die variable zu deklarieren rname
wenn es richtig erklärt, in den Datensatz.
- Sie sollten erwägen, eine sqlfiddle mit diese.
- Ich glaube, es ist keine Oracle-Motor in sqlfiddle.
- Oracle ist sicherlich unterstützt SQLFiddle. Gehen Sie zu sqlfiddle.com klicken Sie auf die Auswahl der Datenbank (standardmäßig MySql 5.5.32, kann aber geändert werden), und in der resultierenden dropdown-pick Oracle 11g R2. Teilen und genießen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Das problem mit der original-code war, dass die definition von
emp_complex_rec
als Typ wurde eine Kollision mit der definition vonemp_complex_rec
als cursor-Schleife-variable. Die explizite cursor-definition ist nicht notwendig - IMO setzen dieSELECT
imFOR
- Schleife ist einfacher und klarer.Teilen und genießen.
Die Spalte Namen in deinem cursor sind Verschieden von dem, was Sie fordern, in der Ausgabe-Zeile, und ich denke, dass die for-Schleife, die Sie verwenden, ist Unordnung in Ihren code ein. Eigentlich, es könnte einfacher sein:
Scheinen Sie zu sein, verwirrend, ein paar verschiedene Techniken.
Option #1 - Explizite cursor geholt manuell
Option #2 - Explizite cursor geholt mit
for
SchleifeOption #3 - Implizite cursor geholt mit
for
SchleifeSiehe die Antwort von @BobJarvis
Option #4 - Explizite cursor geholt nur einmal
Für diese Art von Szenario, wo bist du nur abrufen eines einzelnen Datensatzes, ich lieber mit einem expliziten cursor und ein Einzel Holen. Es spielt keine Rolle, wenn Ihre Abfrage ist wieder 1 Zeile oder 100, da Sie nur handeln auf eine. Warum Durchlaufen und alle Zeilen, die Sie gehen zu ignorieren?