2016-06-29 2 views
1

searchTerm이 열 중 하나에있는 경우 테이블에서 여러 행을 반환하는 함수를 만들려고합니다. (나는 포스트 그레스에 새로운입니다.)오류 : 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)을 검색하려는 것처럼 사용자의 설명이 들립니다. 다시 말하지만, 대부분의 필수 정보가 누락되었습니다.

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

관련 :

잡담 :
혼합 사용하지 마십시오 매우 빠르고 약간 더러운 방법은 text로 변환 전체 행 식을 검색하는 것 당신이 그것을 피할 수 있다면, Postgres에서 식별자를 사용해야합니다. Are PostgreSQL column names case-sensitive?

  • 함수의 언어 이름을 인용하지 마십시오. 그것은 식별자입니다.

+0

안녕하세요, 어윈, 시작이 필요하지 않니? 이 오류가 발생하기 때문에 http://pasteboard.co/22ZD5izR.jpg –

+0

@bluepiranha :'BEGIN'과'END'는'LANGUAGE plpgsql'에는 필요하지만'LANGUAGE sql'에는 필요 없습니다. 이 오류는 SQL 함수가 매개 변수 이름을 허용하지 않는 매우 오래된 버전의 Postgres에 있음을 나타냅니다. 함수 몸체에서'$ 1'을 대신 사용할 수 있습니다. –

관련 문제