Afgezien van je directe citeerprobleem (is goed aangepakt door Jeff), kan de functie veel eenvoudiger en sneller zijn als volgt:
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$;
Belangrijkste punten:
-
Je functie was nog steeds kapot. Verwijzingen naar
movie_makers.title
enmovie_makers.ncrew
zou zo niet werken. Ik heb het gerepareerd. -
Gebruik
RETURN QUERY
in plaats van de lus. Op deze manier hoeven we ook helemaal geen variabelen te gebruiken of zelfs maar te declareren. Zie: -
Gebruik optioneel de hoofdletterongevoelige operator voor vergelijking van reguliere expressies
~*
. (Eenvoudiger, niet sneller.)Hoe dan ook, je wilt misschien ontsnappen aan speciale tekens. Zie:
Terzijde:het heeft nauwelijks zin om te filteren op een weergave die al 'Fight Club' als enige rij selecteert. Voor een zinvolle zoekopdracht zou u deze weergaven niet gebruiken ...