簡體   English   中英

從plpgsql函數返回一個select

[英]Return a select from a plpgsql function

我需要從plpgsql函數返回一個動態生成的select語句。 這是我到目前為止:

CREATE OR REPLACE FUNCTION qa_scf(cname character varying, tname character varying)
RETURNS text AS
$BODY$
BEGIN
return '* from ' ||tname|| 'where ' ||cname ||' != ''AL''';
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

調用者從批處理文件中運行:

select qa_scf('state', 'testtable')

這將返回文字文本“qa_scf * from testtable where state!='AL'”。 我需要從sql批處理文件運行此查詢,但我似乎無法找到正確的return語句讓此函數返回一個字符串,然后讓sql批處理執行它。 我正在使用Postgres 9.0。

返回類型應為SETOF RECORD。 執行和返回SQL將變為RETURN QUERY EXECUTE。 您的查詢缺少SELECT。 在那之前還有空白。

CREATE OR REPLACE FUNCTION qa_scf(cname character varying, tname character varying)
RETURNS SETOF RECORD AS
$BODY$
BEGIN
    RETURN QUERY EXECUTE 'SELECT * from ' ||tname|| ' where ' ||cname ||' != ''AL''';
END;
$BODY$
LANGUAGE plpgsql;

調用此函數會變得有點復雜,因為您必須在結果中指定所需的列。 像這樣:

SELECT *
FROM qa_scf('foo', 'bar') AS t(col1_name col1_type, ...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM