2016-06-29 3 views
1

Попытка создать функцию, которая будет возвращать несколько строк из таблицы, если searchTerm существует в любом месте внутри одного из столбцов. (Я новичок в Postgres.)Ошибка: столбец не существует в PostgreSQL

CREATE OR REPLACE FUNCTION dts_getProjects(searchTerm TEXT) RETURNS SETOF project 
AS $$ 
SELECT credit_br AS Branch, status FROM job_project 
WHERE credit_br LIKE '%'||searchTerm||'%' 
$$ 
language 'sql'; 

Я получаю эту ошибку:

ERROR: column "searchTerm" does not exist 
LINE 3: ...status FROM job_project WHERE credit_br LIKE '%'||searchTerm||'... 
+0

Пожалуйста, не забудьте всегда указать свою версию Postgres и точное определение таблиц соответствующих таблиц. Подсказка: 'SELECT version();' –

ответ

0

Он должен работать так:

CREATE OR REPLACE FUNCTION dts_get_projects(_search_term text) 
    RETURNS SETOF job_project AS 
$func$ 
SELECT j.* 
FROM job_project j 
WHERE j.credit_br ILIKE '%' || _search_term || '%' 
$func$ LANGUAGE sql; 

Я использую тип таблицы для возврата целых строк , Это безопасный резерв, поскольку вы не раскрывали никаких типов данных или определений таблиц.

Я также использую ILIKE, чтобы сделать поиск без учета регистра (просто предположение, вы решите).

credit_br. Ваше описание похоже на поиск всех столбцов (anywhere inside one of the columns). Опять же, большая часть существенной информации отсутствует. Очень быстрый и немного грязный способ будет искать все выражение строки преобразуются в text:

... 
WHERE j::text ILIKE '%' || _search_term || '%'; 
... 

Похожие:

отступлений:
Не использовать смешанный - Идентификаторы casecase в Postgres, если вы можете избежать этого.

Не указывайте название языка функций. Это идентификатор.

+0

Привет, Эрвин, не требуется начало конца? Поскольку я получаю эту ошибку http://pasteboard.co/22ZD5izR.jpg –

+0

@bluepiranha: 'BEGIN' и' END' необходимы для 'LANGUAGE plpgsql', но не для' LANGUAGE sql'. Полученная ошибка указывает, что вы находитесь в очень старой версии Postgres, где функции SQL не принимают имена параметров. Вместо этого вы можете использовать '$ 1' в теле функции. –

Смежные вопросы