Bortset fra dit umiddelbare citeringsproblem (er blevet løst korrekt af Jeff), kan funktionen være meget enklere og hurtigere som denne:
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$;
Vigtigste punkter:
-
Din funktion var stadig i stykker. Referencer til
movie_makers.title
ogmovie_makers.ncrew
ville ikke fungere på den måde. Jeg har rettet det. -
Brug
RETURN QUERY
i stedet for løkken. På denne måde behøver vi heller ikke at bruge eller endda erklære nogen variable overhovedet. Se: -
Brug eventuelt den store og små bogstaver ufølsomme regulære udtryk match operator
~*
. (Enklere, ikke hurtigere.)Uanset hvad, vil du måske undslippe specialtegn. Se:
Bortset fra:giver næppe mening at filtrere på en visning, der allerede vælger 'Fight Club' som sin eneste række. For en meningsfuld søgning ville du ikke bruge disse visninger ...