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 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