Es ist mir unklar, was Sie versuchen zu tun. I angenommen Sie möchten herausfinden, ob ein Buch verfügbar ist oder nicht und diese Informationen an den Aufrufer der Funktion zurückgeben.
Ihre Deklaration des Prozedurheaders und der Variablen ist falsch.
- Prozedur- oder Funktionsparameter sind nicht mit einer Länge für den Datentyp definiert.
- Innerhalb einer Prozedur oder Funktion, die Sie nicht
declare
brauchen
- Sie das Ergebnis irgendwo ohne Einlochen
select
Aussage nicht haben kann. * Zuordnung zu einer Variablen einen konstanten Wert wird :=
- fertig mit der Wenn Sie Informationen zum Anrufer zurückkehren möchten, verwenden Sie eine Funktion, kein Verfahren
- Sie nicht den gleichen Namen wie eine Spalte Variablen oder Parameter geben sollte. Eine gängige Benennungskonvention in der Oracle-Welt besteht darin, Parametern das Präfix
p_
und lokale Variablen das Präfix l_
zu geben, aber alles, was einen Namenskonflikt zwischen Spaltennamen und Variablen vermeidet, ist OK - sei nur konsistent.
CREATE function book_check(p_book_id varchar)
return varchar
as
l_count integer;
l_result varchar(20);
begin
select count(*)
into l_count
from book_copies
where No_of_Copies > 0
and book_id = p_book_id;
if l_count > 0 then
l_result := 'Book available';
else
l_result := "Book not available";
end if;
return result;
end;
/
Sie sollten sich wirklich die Zeit nehmen und die PL/SQL Language reference lesen. Alles oben wird dort erklärt.
Was genau wollen Sie tun? –
Die Ebene ['Auswählen in'] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/selectinto_statement.htm) ist nur für einen einzelnen Wert. Wenn Sie mehrere Werte auf einmal aufnehmen möchten, müssen Sie ein Array definieren und das ['bulk collect'] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/tuning) verwenden. htm # BABEIACI) -Klausel. Offensichtlich, wenn Sie wollen, ist eine Existenzprüfung, die Sie tun können, ohne irgendetwas in Gedächtnis zu lesen. –