我有这个功能,我将查询结果存储在RECORD
类型变量中。
问题是我的查询的两个表有一个具有相同名称的列(“description”),我不知道如何使用RECORD
变量来区分这两个。
CREATE OR REPLACE FUNCTION fn_x(_id BIGINT)
RETURNS TEXT AS $BODY$
DECLARE
l_row RECORD;
l_tableADescription TEXT;
l_tableBDescription TEXT;
BEGIN
SELECT *
INTO l_row
FROM tableA a
JOIN tableB b ON (a.idA = b.idA)
WHERE e.idA = _id;
-- problem is here
l_tableADescription = l_row.tableA.description;
l_tableBDescription = l_row.tableB.description;
-- do other stuff
RETURN '';
END;
$BODY$
LANGUAGE plpgsql STABLE;
在AS
子句中使用SELECT
不是一个选项,因为这两个表有很多列。
我正在使用PostgreSQL 9.4.4
答案 0 :(得分:0)
如果列名不是唯一的,我不知道在输入查询时命名变量的任何方法。即:
SELECT a.description AS t1Desc, b.description AS t2Desc, *
INTO row
FROM tableA a
JOIN tableB b ON (a.idA = b.idB);
然后从RECORD变量中单独访问它们:
tableADescription_1 = row.t1Desc;
tableBDescription_1 = row.t2Desc;
使用查询中指定的名称,而不是表中的原始列名称。
这就是我们在一个项目中使用的,我们在一个具有通用名称的连接中有两个表。