任何使用以下参数运行SQL查询(针对postgres)而无需手动替换它们的工具

本文关键字:替换 工具 postgres 参数 运行 SQL 针对 查询 任何使 | 更新日期: 2023-09-27 18:24:31

假设我有一个查询

select * from orders   where company=:company

我通过在代码中设置参数来运行它。

一切都很好,但如果我想在我的sql工具(例如pgadmin)中运行这个查询,但我不想手动用实际值替换参数(真正的查询有5个参数,而且非常大),该怎么办。

是否有一种工具或方法可以运行查询并在某个地方设置参数值,以便在查询中使用这些值,就像从代码中运行一样?

如果相关的话,我使用C#和NHibernate(但在本例中,我使用原生SQL查询)和Postgresql。

EDIT:要求:SQL查询文本不应以任何方式更改,参数应使用":"字符指定,而不是以任何其他方式指定。它不应该是一个命令行工具(而是一个具有可视化UI的工具)。

任何使用以下参数运行SQL查询(针对postgres)而无需手动替换它们的工具

最简单的方法是将查询包装在函数中

create function f(_company text)
returns setof orders as $$
    select *
    from orders
    where company = _company
;
$$ language sql;

然后在图形客户端中像这样使用它

select * from f('company name');

在C#客户端中,使用相同的参数语法:

select * from f(:company);

函数的使用将简化代码。它们是可重复使用的。如果只更改了函数,则无需重新生成应用程序。

您创建了一个实际上并不存在的问题。如果你真的必须使用不同的东西来编写查询,那么匿名块是最好的解决方案:

DROP TABLE IF EXISTS foobar;
DO $$
DECLARE _foo TEXT;
DECLARE _bar TEXT;
BEGIN
  _foo := 'foo' ;
  _bar := 'bar' ;
  CREATE TEMP TABLE foobar AS SELECT _foo, _bar;
END $$;
SELECT * FROM foobar;

对于每个变量,您将获得5行额外的行数+2行。当你高兴的时候,只要找到"_"并将其替换为":",你就会得到你的查询。