Функция get_catalog

Текст динамического запроса формируем в отдельной переменной, которую перед выполнением запишем в журнал сервера. Для более полной информации включим в сообщение значения переданных в функцию параметров.

Отладочные строки в журнале можно найти по тексту "DEBUG get_catalog".

После отладки команду RAISE LOG можно удалить или закомментировать.

=> CREATE OR REPLACE FUNCTION get_catalog(author_name text, book_title text, in_stock boolean)
RETURNS TABLE(book_id integer, display_name text, onhand_qty integer)
AS $$
DECLARE
    title_cond text := '';
    author_cond text := '';
    qty_cond text := '';
    cmd text := '';
BEGIN
    IF book_title != '' THEN
        title_cond := format(' AND cv.title ILIKE %L', '%'||coalesce(book_title,'')||'%');
    END IF;
    IF author_name != '' THEN
        author_cond := format(' AND cv.authors ILIKE %L', '%'||coalesce(author_name,'')||'%');
    END IF;
    IF in_stock THEN
        qty_cond := ' AND cv.onhand_qty > 0';
    END IF;
    cmd := '
        SELECT cv.book_id, 
               cv.display_name,
               cv.onhand_qty
        FROM   catalog_v cv
        WHERE  true'
        || title_cond || author_cond || qty_cond || '
        ORDER BY display_name';

    RAISE LOG 'DEBUG get_catalog (%, %, %): %', author_name, book_title, in_stock, cmd;
    RETURN QUERY EXECUTE cmd;
END;
$$ STABLE LANGUAGE plpgsql;
CREATE FUNCTION