我想这样做:
SELECT (EVAL 'SELECT 1') + 1;
在 PostgreSQL 中有没有办法像这样 (EVAL
)?
最佳答案
如果您尝试“求值”的语句总是返回相同的数据类型,您可以编写一个使用 Grzegorz 提到的 EXECUTE 的 eval() 函数。
create or replace function eval(expression text) returns integer
as
$body$
declare
result integer;
begin
execute expression into result;
return result;
end;
$body$
language plpgsql
然后你可以做类似的事情
SELECT eval('select 41') + 1;
但如果您的动态语句为您要计算的每个表达式返回不同的内容,则此方法将不起作用。
另请记住,这会通过运行任意语句带来巨大的安全风险。如果这是一个问题,则取决于您的环境。如果它仅用于交互式 SQL session ,那么这不是问题。
关于sql - 有什么方法可以在 PostgreSQL 中的字符串值(如 eval)中执行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433201/