Package Oracle ou une fonction dans l'état non valide
En essayant de créer un pl/sql curseur de la fonction de retour de détails à partir d'une base de données oracle.
La table correspondante, MEETING
, a les colonnes
MEETING_ID
: nombre(10), TIME
: timestamp(4), TITLE
: varchar(20)
CREATE OR REPLACE FUNCTION GetMeeting
(meetingnumber MEETING.MEETING_ID%TYPE)
RETURN VARCHAR
IS
CURSOR current_meeting(meetingnumber MEETING.MEETING_ID%TYPE)
IS
SELECT TITLE, TIME
FROM MEETING
WHERE MEETING_ID = meetingnumber;
r_meeting current_meeting%ROWTYPE;
BEGIN
OPEN current_meeting(meetingnumber);
FETCH current_meeting INTO r_meeting;
IF current_meeting%NOTFOUND THEN
r_meeting.TITLE := 'UNKNOWN APPOINTMENT';
END IF;
CLOSE current_meeting;
RETURN r_meeting.TITLE;
END;
SELECT GetMeeting (27) name
FROM MEETING;
La fonction semble compilation d'accord - mais lorsqu'jette
ORA-06575: Paquet ou de la fonction GETMEETING est dans un état non valide
La fonction de dire que c'compilé avec succès avec succès avec des avertissements? Si cette dernière option, vous pouvez faire
Il ne semble pas être quelque chose de mal avec ça. Avec votre définition de la table de la fonction compile et s'exécute correctement. Comment vous appelez ça n'a pas de sens, mais je suppose que c'est un test. La mise à jour de la
Il dit seulement: "la fonction crée". essayer d'activer afficher les erreurs; le compilateur go bananas "a Rencontré le symbole "SHOW""
OK,
Je l'ai fait, couru les élus déclaration séparément. La résiliation de la plsql avec la / les causes de l'échec de la compilation. Le compilateur est la Demande Express
show errors
immédiatement après. Vous pouvez également faire show errors function getmeeting
plus tard pour voir pourquoi il est invalide. Mais vous êtes de retour d'une valeur de r_meeting
lorsque vous avez %notfound
, qui pourrait être un problème au moment de l'exécution? Peut-être plus important encore, en déclarant le retour comme varchar
plutôt que varchar2
peut être un problème, mais je n'aurais pas pensé ainsi.Il ne semble pas être quelque chose de mal avec ça. Avec votre définition de la table de la fonction compile et s'exécute correctement. Comment vous appelez ça n'a pas de sens, mais je suppose que c'est un test. La mise à jour de la
r_meeting
valeur est peut-être inhabituel, mais semble fonctionner OK.Il dit seulement: "la fonction crée". essayer d'activer afficher les erreurs; le compilateur go bananas "a Rencontré le symbole "SHOW""
OK,
show errors
ne fonctionne que dans SQL*Plus et SQL Developer pour autant que je sais; vous pouvez regarder dans le user_errors
table à la place, mais il ne devrait pas montrer quoi que ce soit si elle a dit qu'elle compilé avec succès. Qui "compilateur" êtes-vous d'utiliser? (Et vous avez un /
entre les end
et la select
vous utilisez pour le tester? Je présume donc de la manière que vous avez rédigé, mais il n'est pas indiqué...)Je l'ai fait, couru les élus déclaration séparément. La résiliation de la plsql avec la / les causes de l'échec de la compilation. Le compilateur est la Demande Express
OriginalL'auteur user137263 | 2013-05-12
Vous devez vous connecter pour publier un commentaire.
Peut-être que cela fonctionnera mieux pour vous:
Pas vérifié la syntaxe.
OriginalL'auteur David Aldridge
D'erreur générés par l'identificateur de colonne "TEMPS" qui est un mot clé SQL; le déclenchement d'une erreur d'exécution lors de l'exécution.
Code malheureusement retourne NULL si le "TEMPS" est retiré
La question était à propos de l'erreur générée par oracle, qui est fixé par la suppression de cette colonne particulière. Malheureusement, votre code (étonnamment) renvoie la même erreur. La fonction n'est toujours pas faire quelque chose d'utile, de l'esprit, que pour une raison quelconque, il est de retour NUL à moins que l'INCONNUE RENDEZ-vous d'exception est déclenchée.
OriginalL'auteur user137263
Il n'y a pas suffisamment de faits pour savoir mais je veux le regarder dans une certaine forme de dépendance circulaire.
La meilleure façon d'éviter les dépendances circulaires est d'utiliser les paquets où les références à d'autres paquets sont faits dans le corps. Éviter autonome de la fonction et de la procédure d'objets.
OriginalL'auteur Michael O'Neill