PostgreSQL:动态 SELECT 查询

问题描述 投票:0回答:1

我正在尝试构建一个动态 SQL 查询,该查询将生成一个表,该表的名称存储在字符串中。 首先,我需要拆分字符串,因为有多个表。我只需要第二个。这就是我使用 SPLIT_PART 函数的原因。它给了我正确的名称,查询构建得很好,但它不返回任何内容。 请问我该如何解决这个问题?或者有其他方法可以解决此类问题吗?

重要提示是,我是在 Grafana 中执行此操作。我无法真正更改输入字符串的格式。另外,我需要保留表内列的名称。

我的代码:

SET
  search_path TO emex_gen2_7371;

DO $$
DECLARE
  tbl_name text;
  dyn_query text;

BEGIN

  SELECT SPLIT_PART('${comparison_1:doublequote}', ',', 2) into tbl_name;

  dyn_query := 'SELECT * FROM ' || tbl_name;
  
  EXECUTE dyn_query;

END $$;

我尝试在网上寻找解决方案,但没有成功。

postgresql grafana dynamic-sql
1个回答
0
投票

匿名过程块

DO
按照设计不返回任何内容。您可以通过副作用返回,例如将 dyn_query 的输出保存到一个表中,您可以在过程完成后读取该表:

CREATE SCHEMA IF NOT EXISTS emex_gen2_7371;
SET search_path TO emex_gen2_7371;

DO $anon_proc$
DECLARE
  tbl_name text;
  dyn_query text;
BEGIN
  SELECT SPLIT_PART('${comparison_1:doublequote}', ',', 2) INTO tbl_name;
  dyn_query := format('CREATE TABLE emex_gen2_7371.my_anon_proc_output 
                       AS SELECT * FROM %1$I ;', tbl_name);
  EXECUTE dyn_query;
END $anon_proc$;

SELECT * FROM emex_gen2_7371.my_anon_proc_output;

通常,如果您希望例程直接将某些内容返回给调用者,则应该将其设为函数

© www.soinside.com 2019 - 2024. All rights reserved.