gpt4 book ai didi

arrays - 通过参数 postgresql 返回列名

转载 作者:行者123 更新时间:2023-11-29 12:56:14 25 4
gpt4 key购买 nike

这是我遇到的一个简化问题。我需要使用函数并将参数传递给它从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com