2014-05-15 2 views
0
CREATE OR REPLACE FUNCTION param_labels(_region_label text, _model_label text) 
RETURNS TABLE (param_label text, param_graphics_label text) LANGUAGE sql AS 
$BODY$ 
SELECT p.param_label, p.param_graphics_label 
FROM parameters  p 
JOIN parameter_links l USING (param_id) 
JOIN regions   r USING (region_id) 
JOIN models   m USING (model_id) 
WHERE p.active 
AND r.region_label = $1 
AND m.model_label = $2 
ORDER BY p.param_graphics_label; 
$BODY$; 

위의 함수에서 SELECT 절에 2 개의 필드가 있습니다. 이제이 필드를 두 개의 임시 변수로 전달해야합니다. 당신의 소중한 제안을 해주십시오.임시 변수에 필드 값 전달

+1

내 가장 가치있는 제안입니다. 두 번째로 가장 귀중한 제안은 [PL/pgSQL - SQL 절차 언어에 대한 훌륭한 설명서] (http://www.postgresql.org/docs/current/static/plpgsql.html)를 확인하는 것입니다. –

답변

0

SQL 함수에는 "변수"가 없습니다. PL/pgSQL 또는 다른 절차 언어 기능과 혼동을 줄 수 있습니다.

plpgsql 함수 SELECT INTO을 사용하여 한 번에 여러 변수를 지정할 수 있습니다. 예 :
Speed up plpgsql that counts doc types in a loop?

그러나 검색어가 설명에 맞지 않고 일련의 행을 반환합니다. 당신은 임시 테이블을 찾고있을 수 있습니다

CREATE TEMP TABLE tmp AS 
SELECT p.param_label, p.param_graphics_label FROM ... 

예 : 당신은 당신이 달성하려고하는 것을 설명하기위한
Using temp table in PL/pgSQL procedure for cleaning tables

관련 문제