PL / SQL prüft, ob die Abfrage leer zurückkehrt
Ich Schreibe eine Prozedur, und ich brauche, um zu überprüfen, ob meine select-Abfrage einen leeren Datensatz oder nicht.
(In diesem Beispiel, ob es gibt keine x,y-shelf)
Wie kann ich das tun?
Habe ich versucht, dieses:
temp shelves.loadability%TYPE := NULL;
BEGIN
select loadability into temp from shelves where rownumber = x and columnnumber = y;
IF temp IS NOT NULL THEN
/* do something when it's not empty */
ELSE
/* do the other thing when it's empty */
END IF;
Aber der zweite Zweig der wenn nie funktioniert...
EDIT:
Oh, es war so einfach...
temp shelves.loadability%TYPE;
BEGIN
select count(*) into temp from shelves where rownumber = x and columnnumber = y;
IF temp != 0 THEN
/* do something when it's not empty */
ELSE
/* do the other thing when it's empty */
END IF;
END;
InformationsquelleAutor der Frage WonderCsabo | 2011-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie ein Ausnahme-handler
InformationsquelleAutor der Antwort Rene
Es ist in der Regel SQL-ähnliche, um nur die Arbeit zu tun, für die Datensätze, die vorhanden sind. In anderen Worten, Sie durchführen könnte Ihre Aufgabe für jedes auftreten von das match, und wenn es keine Ereignisse, die Sie tun Sie es nicht. So würden Sie nicht sogar brauchen, die IF-ELSE-Konstrukt.
Ich nicht empfehlen, mit einem cursor, um die Arbeit zu tun, denn das wäre counter zu meinem ersten Vorschlag, dass Sie es tun, mehr SQL-like. Aber wenn Sie haben, es zu tun auf diese Weise, dann ein cursor kann tun, was Sie wollen.
Und ja, ich weiß, das beantwortet Ihre Frage nicht direkt.
InformationsquelleAutor der Antwort MJB
Exception-handling wäre das erste, was, denke ich auch, aber wenn Sie nicht wollen, zu belasten, sich mit dem Umgang mit all den verschiedenen Fällen, Neige ich dazu, verwenden Sie eine
select count(*) from
. Die nette Sache mit count(*) ist, dass es IMMER wieder etwas (vorausgesetzt die Abfrage ist legal). In diesem Fall könnten Sie zählen, um zu sehen, ob es gibt 0 (keine übereinstimmung) oder mehr (in dem Fall kann man etwas tun.Konnte man so etwas wie dieses:
InformationsquelleAutor der Antwort schwarz
fangen Sie zunächst nicht wollte-Bedingung und verwenden Sie count(1), weil count(*) tatsächlich versucht, zu zählen, etwas, und fügen Sie rownum=1, Sie müssen nur zuerst nicht passende Bedingung. ich verwenden Sie diese Anweisung.
Für Sie nur
InformationsquelleAutor der Antwort user2879235