如何在Execute语句中访问记录的字段?

时间:2017-11-27 19:56:05

标签: postgresql plpgsql

我需要从动态表中访问动态字段,我有这个代码来执行此操作

这里f_field动态地从t_table中获取列的名称。

当t_table被声明为记录时,此代码会出错。但是当声明为静态列fieldType时,它会按预期运行。

问题是,我如何声明t_row以使此代码正常运行,或者如何通过其他方式实现相同目的。请记住,t_table和f_field是动态的,因此它们的值会发生变化。

FOR t_row IN EXECUTE 'SELECT * from ' || t_table loop
    EXECUTE format('select $1.%I', f_field) USING t_row into f;
    RAISE notice '%', f;
  END LOOP;

1 个答案:

答案 0 :(得分:0)

当我进行研究时,我发现像EXECUTE这样的句子并不理解记录结构,这是通过试验plpgsql,因为没有关于此的文档。所以我需要将t_row转换为另一种具有从动态字段中提取值的方法的对象,我选择json因为我觉得它很容易使用。这是我的代码。

FOR t_row IN EXECUTE 'SELECT * from dd.a' loop
   f_json := row_to_json(layer_row);
   f := json_extract_path(f_json, f_field);
   RAISE notice '%', f;
END LOOP;  

这对我来说很好,但这只是一个小问题,如果有人可以指出为什么我的第一个代码不起作用我会贬低它。提前致谢

相关问题