Selain masalah kutipan langsung Anda (telah ditangani dengan benar oleh Jeff), fungsinya bisa lebih sederhana dan lebih cepat seperti ini:
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$;
Poin utama:
-
Fungsi Anda masih rusak. Referensi ke
movie_makers.title
danmovie_makers.ncrew
tidak akan bekerja seperti itu. Saya memperbaikinya. -
Gunakan
RETURN QUERY
bukannya lingkaran. Dengan cara ini kita juga tidak perlu menggunakan atau bahkan mendeklarasikan variabel apapun sama sekali. Lihat: -
Secara opsional, gunakan operator pencocokan ekspresi reguler yang tidak peka huruf besar-kecil
~*
. (Sederhana, tidak lebih cepat.)Either way, Anda mungkin ingin melarikan diri dari karakter khusus. Lihat:
Selain:hampir tidak masuk akal untuk memfilter tampilan yang sudah memilih 'Fight Club' sebagai satu-satunya baris. Untuk pencarian yang berarti, Anda tidak akan menggunakan tampilan ini ...