PLS-00302: le composant doit être déclarée Incapable de résoudre
J'ai essayé le programme ci-dessous dans SQL developer et face à certaines questions:
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;
J'obtiens l'erreur de déclarer la variable rname
si elle a été correctement déclarées dans le dossier.
- Vous devriez envisager la création d'un sqlfiddle avec cette.
- Je crois qu'il n'est pas Oracle moteur disponible dans sqlfiddle.
- Oracle est certainement pris en charge sur SQLFiddle. Aller à sqlfiddle.com cliquez sur la sélection de base de données (par défaut, MySql 5.5.32 mais peut être changé), et dans le déroulant choisir Oracle 11g R2. Partager et d'en profiter.
Vous devez vous connecter pour publier un commentaire.
Essayer:
Le problème avec le code d'origine, la définition de
emp_complex_rec
comme un type était en collision avec la définition deemp_complex_rec
comme un curseur de la variable de boucle. De manière explicite de la définition de curseur n'est pas nécessaire soit - OMI mettre leSELECT
dans leFOR
boucle est plus facile et plus claire.De partager et de profiter.
De la colonne des noms dans votre curseur est différent de ce que vous appelez en ligne de sortie, et je suppose que pour la boucle que vous utilisez est gâcher votre code. En fait, il pourrait être plus simple:
Vous semble être la confusion de quelques techniques différentes.
Option #1 - Explicite curseur extraites manuellement
Option #2 - Explicite curseur chercher à l'aide de
for
boucleOption #3 - curseur Implicite chercher à l'aide de
for
boucleVoir la réponse de @BobJarvis
Option #4 - Explicite curseur récupéré qu'une seule fois
Pour ce genre de scénario où vous êtes seul à la récupération d'un enregistrement unique, je préfère utiliser un curseur explicite et une seule extraction. Il n'a pas d'importance si votre requête est de retour en 1 ligne ou 100, puisque vous êtes seulement agir sur l'un. Pourquoi parcourir toutes les lignes que vous allez ignorer?