【问题标题】:Postgresql dynamic cursor (for record in EXECUTE), field accessPostgresql 动态游标(用于 EXECUTE 中的记录),字段访问
【发布时间】:2017-08-02 10:16:27
【问题描述】:

假设下面的块:

do $$
declare
v_table_name text:='table_name';
v_column_name text:='column_name';
v_record record;
v_sql_dynamic text;
v_enum_xml xml;
v_string text;
begin
  v_sql_dynamic:=format('select %s from %s',v_column_name,v_table_name);
  FOR v_record IN EXECUTE v_sql_dynamic
  LOOP
   raise notice 'field with name % has a value of %',v_column_name,***?????***;
  END LOOP;
end;
$$ language plpgsql

如何以v_record.v_column_name 之类的方式访问 v_record 的字段?

【问题讨论】:

  • to_jsonb(v_record)->>v_column_name
  • 是的,它有效。谢谢

标签: postgresql cursor plpgsql dynamic-sql


【解决方案1】:

See Abelisto's comment. 无论如何将值转换为textto_json() 已经足够好,而且速度稍快。

DO
$$
DECLARE
   v_table_name   text := 'table_name';
   v_column_name  text := 'column_name';
   v_sql_dynamic  text := format('select %s from %s', v_column_name, v_table_name);
   v_record       record;
BEGIN
   FOR v_record IN EXECUTE v_sql_dynamic
   LOOP
      RAISE NOTICE 'field named % has value %.'
    , v_column_name, to_json(v_record) ->> v_column_name;
   END LOOP;
END
$$ LANGUAGE plpgsql;

相关:

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 2014-08-09
    • 2012-05-25
    • 1970-01-01
    • 2011-06-25
    • 2015-12-06
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多