从RECORD中检索值

时间:2012-10-17 14:11:33

标签: postgresql plpgsql

在plpgsql函数中,我有一个类型为record的变量:

  

my_rec RECORD;

此记录包含来自任意表的行,因此在执行之前我不知道列。 但是,我确实有至少一个可用作varchar的列的名称。

问题是:如何从my_rec中检索给定列的值?

2 个答案:

答案 0 :(得分:2)

使用hstorerecord函数中的动态列一起使用PL/PgSQL

CREATE EXTENSION hstore;

CREATE OR REPLACE FUNCTION test_fn(col_name text) RETURNS text AS $$
DECLARE 
  input_row record;
  col_value text;
BEGIN
  SELECT INTO input_row 
    * 
  FROM ( VALUES ('a','b','c',1) ) AS dummyrow(col1,col2,col3,intcol);

  SELECT INTO col_value
    hstore(input_row) -> col_name;

  RETURN col_value;
END;
$$ LANGUAGE 'plpgsql';

hstore是一个扩展,但它是一个自8.3以来与PostgreSQL捆绑在一起的扩展,并且自9.1以来可以使用CREATE EXTENSION进行安装。自8.4或9.0以来,支持记录到hstore的转换。

答案 1 :(得分:1)

我不知道如何在plpgsql中执行此操作。我为您做了一些测试,并试图使“EXECUTE SELECT”解决方案工作,例如:

 EXECUTE 'select $1.' || quote_ident(the_param) USING my_rec INTO my_var;

这对我不起作用,我得到了:

 could not identify column "{{param_value here}}" in record data type
几年前,

Here是一个非常类似的问题,说用plpgsql是不可能的。根据它的建议,似乎应该可以使用其他一些语言。引用Tom Lane的回答:

  

在plpgsql中无法做到这一点。你可以在其他PL中做到这一点   (例如plperl,pltcl),因为它们不像plpgsql那样强类型。