我正在尝试构建一个动态 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 $$;
我尝试在网上寻找解决方案,但没有成功。
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;
通常,如果您希望例程直接将某些内容返回给调用者,则应该将其设为函数。