Oracle-Paket oder eine Funktion in ungültigen Zustand

Versuchen, erstellen Sie eine pl/sql-cursor-basierte Funktion, um zurückzukehren details aus einer oracle-Datenbank.

Der entsprechenden Tabelle, MEETING hat die Spalten
MEETING_ID: number(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;

Die Funktion scheint zu kompilieren, okay - aber wenn Sie aufgerufen wird, wirft

ORA-06575: Paket oder Funktion GETMEETING ist in einem ungültigen Zustand

Die Funktion sagen, dass es erfolgreich kompiliert wurde, oder erfolgreich mit Warnungen? Wenn letzteres können Sie tun show errors sofort danach. Sie können auch show errors function getmeeting später zu sehen, warum es ungültig. Aber Sie gibt einen Wert zurück, aus r_meeting wenn Sie hätten haben können %notfound, die möglicherweise ein problem bei der Laufzeit? Was vielleicht noch wichtiger ist, er erklärt die Rückkehr als varchar eher als varchar2 könnte ein Problem sein, aber ich würde nicht so gedacht haben.
Es scheint nicht zu sein, nichts falsch mit, dass. Mit dem Tisch-definition die Funktion kompiliert und läuft OK. Wie Sie fordern es nicht sinnvoll ist, aber ich nehme an, das ist ein test. Aktualisierung der r_meeting Wert ist ungewöhnlich, vielleicht, aber scheint zu funktionieren OK.
Er sagt nur: "Funktion erstellt". Sie versuchen zu aktivieren, die Fehler zeigen; veranlasst den compiler zu go bananas "stießen auf das symbol "KARTE""
OK, show errors funktioniert nur in der SQL*Plus und SQL-Developer, soweit ich weiß, suchen Sie in der user_errors Tabelle statt, aber es sollte nicht alles zeigen, wenn er sagte, dass es erfolgreich kompiliert wurde. Die 'compiler' verwenden Sie? (Und Sie haben eine / zwischen den end und die select Sie verwenden, um es zu testen? Ich war der Annahme, so aus der Art, wie Sie formuliert habe, aber es wird nicht angezeigt...)
Ich habe tatsächlich lief die Auserwählten Anweisung separat. Die Kündigung der plsql, mit der / den Ursachen der Kompilierung Fehler. Der compiler ist Application Express

InformationsquelleAutor user137263 | 2013-05-12

Schreibe einen Kommentar