Bortsett från ditt omedelbara offertproblem (har åtgärdats ordentligt av Jeff), kan funktionen vara mycket enklare och snabbare så här:
CREATE or REPLACE FUNCTION q11(partial_title text)
RETURNS SETOF text
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY
SELECT m.title || ' has ' || m.ncrew || ' cast and crew'
FROM movie_makers m
WHERE m.title ~* $1;
IF NOT FOUND THEN
RETURN NEXT 'No matching titles';
END IF;
END
$func$;
Huvudpunkter:
-
Din funktion var fortfarande trasig. Referenser till
movie_makers.title
ochmovie_makers.ncrew
skulle inte fungera så. Jag fixade det. -
Använd
RETURN QUERY
istället för slingan. På så sätt behöver vi inte heller använda eller ens deklarera några variabler alls. Se: -
Använd valfritt den skiftlägesokänsliga matchningsoperatorn för reguljära uttryck
~*
. (Enklare, inte snabbare.)Hur som helst, kanske du vill undvika specialtecken. Se:
Bortsett från:är knappast vettigt att filtrera på en vy som redan väljer "Fight Club" som sin enda rad. För en meningsfull sökning skulle du inte använda dessa vyer ...