gpt4 book ai didi

postgresql - Postgres如何评估从查询到函数中变量的表达式

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

我希望能够获取从表中查询名称的函数变量的值

编辑以显示查询表而不是从静态值查询:

    create table __test__
(
_col text
);
insert into __test__
(_col)
values('_a');

create or replace function __test()
returns void
language 'plpgsql' as
$$
declare
_r record;
_a int;
_b int;
_sql text;
begin

_a = 1;
_b = 0;

for _r in select _col as _nam from __test__ a loop
-- query returns one row valued "_a"
_sql = 'select ' || _r._nam ;
execute _sql into _b;
end loop;

raise info 'value of _b %', _b;

end;
$$;
select __test()

当函数执行时 _b = 1。这可能吗?

同样的错误...

ERROR:  column "_a" does not exist
LINE 1: select _a
^
QUERY: select _a
CONTEXT: PL/pgSQL function "__test" line 15 at EXECUTE statement

最佳答案

您可以创建一个临时表,在其中插入您的变量名和值,然后对其执行选择。打扫完就可以了我以前使用过类似的方法。它工作正常。不过它确实有额外的开销。

编辑:添加示例

CREATE FUNCTION switch (in_var text) RETURNS text
LANGUAGE PLPGSQL VOLATILE AS $$

declare t_test text;
switch_vals text[];

BEGIN

CREATE TEMPORARY TABLE switch_values (var text, value text);

EXECUTE $e$ INSERT INTO switch_values VALUES
('a', '1'), ('b', '2'), ('c', '3') $e$;

EXECUTE $e$ SELECT value FROM switch_values WHERE var = $e$ || quote_literal(in_var)
INTO t_test;

DROP TABLE switch_values;

RETURN t_test;

END; $$;

postgres=# select switch('a');
switch
--------
1
(1 row)

关于postgresql - Postgres如何评估从查询到函数中变量的表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12296758/

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