2017-05-19 1 views
1

(x 정수, y 정수)로 정의 된 "작은"테이블의 x 열을 반환하는 plpgsql을 사용하여 함수 내에서보기를 만들려고합니다.관계가 없습니다. PLPGSQL

create or replace function skyline_naive2(dataset text) returns setof integer as 
$$ 
declare 
    fullx text; 
begin 
    fullx = dataset||'_skyline_naive2'; 
    execute format('create view %s as select x,y from %s',fullx,dataset); 
    return query select x from fullx; 
end 
$$ language plpgsql; 

select * from skyline_naive2('small'); 

내가 더 fullx 관계가 없기 때문입니다 것을 이해하지만, 내가 변수 이름을 사용하여 뷰를 호출 할 "관계 fullx이 존재하지 않습니다"를 반환합니다.

어떤 도움 당신은 동적 쿼리를 EXECUTE 필요

답변

2

를 사용하여 동적 SQL (당신이 create에 사용되는 것처럼) select에 대한 :

create or replace function skyline_naive2(dataset text) returns setof integer as 
$$ 
declare 
    fullx text; 
begin 
    fullx = dataset||'_skyline_naive2'; 
    execute format('create view %I as select x,y from %I',fullx,dataset); 
    return query execute format('select x from %I', fullx); 
end 
$$ language plpgsql; 
+0

덕분에 많이 작동합니다 또한 setof 정수 대신 정수를 반환하는 경우 어떻게 할 수 있습니까? foreg return query format ('count count (x) from % I', fullx); 그러나 반환 쿼리는 setof –

+0

에서만 작동합니다.이 경우 정수 변수 'execute ... into variable'을 선언하고 반환 할 수 있습니다. – klin

2

될 것입니다 :

RETURN QUERY EXECUTE 'SELECT x FROM ' || fullx; 
+0

덕분에 많은 또한 setof 정수 대신 정수를 반환하는 경우 수행 할 수있는 작업은 무엇입니까? foreg return 질의 실행 형식 ('select count (x) from % I', fullx); 하지만 반환 쿼리는 setof –