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
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
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,
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
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht besser für Sie arbeiten:
Nicht syntax überprüft.
InformationsquelleAutor David Aldridge
Fehler generiert wird durch die Spalten-id 'ZEIT', was ist ein SQL-Schlüsselwort ist; dies löst einen Laufzeitfehler aus, wenn Sie ausgeführt werden.
Code leider gibt NULL zurück, wenn 'die ZEIT' ist entfernt
Die Frage war, über die Fehler von oracle, das ist behoben durch das entfernen dieser bestimmten Spalte. Leider ist Ihr code (überraschend) wirft den gleichen Fehler. Die Funktion immer noch nicht tun, etwas sinnvolles, wohlgemerkt, denn aus irgendeinem Grund ist es NULL zurückgeben, es sei denn, die UNBEKANNTEN TERMIN Ausnahme ausgelöst wird.
InformationsquelleAutor user137263
Gibt es nicht genügend Fakten zu wissen, aber ich würde in irgendeiner form die zirkuläre Abhängigkeit.
Die besten vermeidet zirkuläre Abhängigkeiten zu Paketen, wo Verweise auf andere Pakete sind im Körper nur. Vermeiden Sie eigenständige Funktion und Prozedur-Objekte.
InformationsquelleAutor Michael O'Neill