2017-05-19 15 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

selectのための使用、動的SQL(あなたがcreateに使用してきたように):

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%(x)から%I'、fullx)を実行します。 しかし、戻り値のクエリはsetof –

+0

でしか機能しません。この場合、整数変数 'execute ... into variable'を宣言して返すことができます。 – klin

2

次のようになります。

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

どうもありがとうまた、setof整数の代わりに整数を返すのであれば何ができるのでしょうか? foreg return query format( 'count count(x)from%I'、fullx)を実行します。戻り値のクエリはsetof –

関連する問題