【发布时间】:2016-10-01 15:06:23
【问题描述】:
示例代码精简了演示问题的基本要素:
CREATE OR REPLACE FUNCTION mytest4() RETURNS TEXT AS $$
DECLARE
wc_row wc_files%ROWTYPE;
fieldName TEXT;
BEGIN
SELECT * INTO wc_row FROM wc_files WHERE "fileNumber" = 17117;
-- RETURN wc_row."fileTitle"; -- This works. I get the contents of the field.
fieldName := 'fileTitle';
-- RETURN format('wc_row.%I',fieldName); -- This returns 'wc_row."fileTitle"'
-- but I need the value of it instead.
RETURN EXECUTE format('wc_row.%I',fieldName); -- This gives a syntax error.
END;
$$ LANGUAGE plpgsql;
在这种情况下如何获取动态生成的字段名称的值?
【问题讨论】:
-
在这种情况下使用
EXECUTE语句的正确方法是:execute format('select $1.%I',fieldName) into result using wc_row;然后return result;(应声明变量result) -
太棒了!我为此挣扎了好几个小时。谢谢!!!
标签: postgresql plpgsql dynamic-sql