PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La funzione PLpgSQL non restituisce titoli corrispondenti

A parte il tuo problema di quotazione immediata (è stato affrontato correttamente da Jeff), la funzione può essere molto più semplice e veloce in questo modo:

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$;

Punti principali:

A parte:non ha senso filtrare su una vista che già seleziona 'Fight Club' come unica riga. Per una ricerca significativa, non useresti queste viste...