【发布时间】:2014-07-18 17:51:54
【问题描述】:
如果infowindow 字段存在,我需要创建一个检查给定表的函数。如果存在,则该函数必须返回 select * from table,但如果不存在,则必须返回一个额外的 id 字段:
CREATE OR REPLACE FUNCTION getxo_ocx_cincu_preparar_infowindow(
guretabla character varying)
RETURNS TABLE AS
$BODY$
DECLARE
tabla ALIAS FOR $1;
BEGIN
IF EXISTS (SELECT 1
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
JOIN pg_attribute a ON a.attrelid = c.oid
WHERE n.nspname = current_schema() -- default to current schema
AND c.relname = tabla
AND a.attname = 'infowindow'
AND NOT a.attisdropped)
THEN
RETURN QUERY EXECUTE 'SELECT * from ' ||tabla ;
ELSE
RETURN QUERY EXECUTE 'SELECT *, ID:' || id::text ||' as infowindow
from ' ||tabla ;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
如果我使用RETURNS SETOF RECORDS,当我对函数进行选择时,我需要指定我不知道的列。如果我使用RETURNS TABLE,我也需要指定字段,所以我不知道该怎么做。
【问题讨论】:
-
您忘记提及您的 Postgres 版本。
标签: postgresql polymorphism plpgsql dynamic-sql return-type