【发布时间】:2021-05-13 01:38:36
【问题描述】:
我想通过使用变量而不是静态列名来访问列。
示例:
variable := 'customer';
SELECT table.variable (this is what I would prefer) instead of table.customer
我需要这个功能,因为我的表中的记录在数据长度方面有所不同(例如,有些数据在 10 列中,有些在 14 或 16 列等),所以我需要动态处理列。据我了解,我不能通过索引来处理列(例如,选择表格的第 8 列)对吗?
我可以循环并将所需的列名放入给定迭代的变量中。但是,当我尝试使用该变量访问列时出现错误(例如,table_name.variable 不起作用)。
为了简单起见,我只粘贴一些虚拟代码来说明问题:
CREATE OR REPLACE FUNCTION dynamic_column_name() returns text
LANGUAGE PLPGSQL
AS $$
DECLARE
col_name text;
return_value text;
BEGIN
create table customer (
id bigint,
name varchar
);
INSERT INTO customer VALUES(1, 'Adam');
col_name := 'name';
-- SELECT customer.name INTO return_value FROM customer WHERE id = 1; -- WORKING, returns 'Adam' but it is not DYNAMIC.
-- SELECT customer.col_name INTO return_value FROM customer WHERE id = 1; -- ERROR: column customer.col_name does not exist
-- SELECT 'customer.'||col_name INTO return_value FROM customer WHERE id = 1; -- NOT working, returns 'customer.name'
-- SELECT customer||'.'||col_name INTO return_value FROM customer WHERE id = 1; -- NOT working, returns whole record + .name, i.e.: (1,Adam).name
DROP TABLE customer;
RETURN return_value;
END;
$$;
SELECT dynamic_column_name();
那么在寻址customer 表的列时,如何使用col_name 变量通过SQL 查询获取'Adam' 字符串?
【问题讨论】:
标签: postgresql plpgsql dynamic-sql