[英]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.