我正在尝试使用执行语句中记录的数据:
for rec1 in SELECT * FROM table1 limit 1000 loop
FOR loop_row IN
select 'geom_wgs_pois5' as col_name
union all select 'geom_wgs_pois4' as col_name
union all select 'geom_wgs_pois3' as col_name
union all select 'geom_wgs_pois2' as col_name
union all select 'geom_wgs_pois1' as col_name
LOOP
select rec1.loop_row into query;
v_sql = 'select count(*)
from table2 a
where a.'||loop_row||' = '||query||'';
execute $$v_sql$$;
..........
我试图将记录直接放入v_sql,但我相信这有范围问题。当我尝试将select语句用于" unpack"记录,我也得到错误。
我在字符串中创建查询然后使用execute语句的方法是故意完成的。我使用其他方法做了相同的功能,但它们太慢了。为了提高性能,我试图引用一个包含更多列的表,以避免在查询中使用大量字符串操作。
我正在使用postgres 8.2.15。我知道这是旧的,我应该升级,但这是我公司提供给我的(因此,我没有选择)。
答案 0 :(得分:0)
在PostgreSQL 8.2中无法比较动态SQL中的REC。你需要最低限度的PostgreSQL 8.4,你应该使用一个USING
子句。在8.2中,您必须手动比较记录中的所有字段。
有解决方法,但我不确定性能。您可以创建具有记录值的临时表,然后在动态SQL中,您可以使用表格JOIN
。