sql - 有什么方法可以在 PostgreSQL 中的字符串值(如 eval)中执行查询?

标签 sql postgresql select eval

我想这样做:

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/

相关文章:

sql - 使用 CAST 和 SUBSTRING 时如何在 postgresql 中过滤查询结果 (pgAdmin 4)

sql - 数组json将元素拆分为列postgres

sql - 与时间相关的 postgres 查询速度

mysql - 在未找到给定查询 "champion"的情况下,返回表中存在的 "championship"的最佳方法

php - 使用 PHP/MySql 中的单个查询从多个表中获取 'related' 数据?

mysql - 根据一列删除重复项并根据另一表中的数据进行过滤

sql - ORACLE SQL 用数组按列名排序

mysql - SQL 查询,从筛选的选择中获取随机行

java - 在 JTextPane 中选择多个项目

mysql - 根据日期获取 MySQL 中的最新行(按另一列分组)