arrays - 通过参数 postgresql 返回列名

标签 arrays postgresql function parameters

这是我遇到的一个简化问题。 我需要使用函数并将参数传递给它从 postgresql 表中获取某些值。这是一个简化的表格和一些值:

CREATE TABLE  testFoo (
  id text NOT NULL,
  "type" text,
  value1 float,
  value2 float,
  value3 float
)
WITH (
  OIDS=FALSE
);

INSERT INTO testFoo (id, "type", value1, value2, value3)
VALUES (1, 'testValue1', '0.11', '0.22', '0.33');
INSERT INTO testFoo (id, "type", value1, value2, value3)
VALUES (1, 'testValue2', '0.00', '0.00', '0.00');

我需要能够获取基于“类型”列内容的值。 因此,例如,如果 type = 'testValue2' 我需要获取 'reading3' 列的内容......如果它是 'testValue1' 那么我需要 'reading2' ...... 这是我想出的一个功能:

DROP  FUNCTION getvalues(_values text[])
CREATE OR REPLACE FUNCTION getvalues(_values text[])
RETURNS TABLE (id text, type text, value float) AS
$BODY$ 
BEGIN
 EXECUTE 'SELECT t.id, t.type,
  CASE 
     WHEN t.type = '|| _values[1] ||' THEN '|| _values[2] ||'
  END AS value
FROM testFoo t';
END;
$BODY$
LANGUAGE plpgsql;

SELECT * FROM getvalues(ARRAY['testValue2','"reading3"']);

但是它给了我以下错误:

ERROR:  column "testvalue2" does not exist
LINE 3:      WHEN t.type = testValue2 THEN "reading3"
                           ^
QUERY:  SELECT t.id, t.type,
  CASE 
     WHEN t.type = testValue2 THEN "reading3"
  END AS value
FROM testFoo t
CONTEXT:  PL/pgSQL function getvalues(text[]) line 3 at EXECUTE
********** Error **********

ERROR: column "testvalue2" does not exist

我试过 format() 和许多其他选项都没有成功...你能看看这个吗? 谢谢。

最佳答案

您应该使用带有适当格式说明符的 format() 函数,特别是 %I 标识符(在本例中为列名)和 % L 用于需要引号的字符串文字。此外,您需要从函数返回实际数据。

CREATE OR REPLACE FUNCTION getvalues(_values text[])
RETURNS TABLE (id text, type text, value float) AS
$BODY$ 
BEGIN
  RETURN QUERY EXECUTE format('SELECT id, "type",
    CASE WHEN "type" = %L THEN %I
    END AS value
    FROM testFoo', _values[1], _values[2]);
END;
$BODY$
LANGUAGE plpgsql;

关于arrays - 通过参数 postgresql 返回列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643442/

相关文章:

c - 为什么我的可变长度数组没有转换?

javascript - 如何将数组的元素添加到另一个对象并计数

javascript - 检查具有相同 "rules"的多个变量

c - 堆栈无法成功将数字插入其中

c - 如何在读取重定向文件的特定行时使程序结束

ruby-on-rails - 如何在 Rails 中添加记录数到组?

php - 用于正确嵌套动态菜单的正则表达式

c# - 函数中的 Dispose 方法重要吗?

sql - 比较主条目并从子表中选择

postgresql - Postgres 表空间检测是 linux 还是 windows