Pomineme-li váš problém s okamžitými citacemi (řádně jej vyřešil Jeff), funkce může být mnohem jednodušší a rychlejší takto:
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$;
Hlavní body:
-
Vaše funkce byla stále rozbitá. Odkazy na
movie_makers.title
amovie_makers.ncrew
takhle by to nefungovalo. Opravil jsem to. -
Použijte
RETURN QUERY
místo smyčky. Tímto způsobem také nemusíme používat nebo dokonce deklarovat vůbec žádné proměnné. Viz: -
Volitelně použijte operátor shody regulárního výrazu
~*
bez rozlišení velkých a malých písmen . (Jednodušší, ne rychlejší.)V každém případě můžete chtít uniknout speciálním znakům. Viz:
Stranou:stěží má smysl filtrovat pohled, který již jako jediný řádek vybírá 'Fight Club'. Pro smysluplné vyhledávání byste tyto pohledy nepoužili ...