如何将cancat查询结果转换为文本变量?

时间:2017-04-08 01:27:11

标签: sql postgresql

我知道执行它的内置函数。但我学习SQL,我想了解如何在没有这些功能的情况下实现这一目标。 即我有下一个代码:

DECLARE @stmt VARCHAR;
SELECT column_1 INTO @stmt FROM some_table;

如何更改此代码,将@stmt中的所有值存储为单个字符串'value 1, value2, value 3, ..., value N'

2 个答案:

答案 0 :(得分:2)

如果要连接column_1的不同值,请使用此

SELECT string_agg(column_1,',') INTO @stmt FROM some_table;

答案 1 :(得分:1)

经过一番搜索,我解决了这个问题:

CREATE OR REPLACE FUNCTION get_table_names() RETURNS VARCHAR AS $$
DECLARE stmt VARCHAR;
DECLARE temp_row RECORD;
BEGIN
    FOR temp_row IN (SELECT table_name FROM information_schema.tables)
        LOOP
            IF stmt IS NULL
                THEN stmt := temp_row.table_name;
                ELSE stmt := stmt || ',' || temp_row.table_name;
            END IF;
        END LOOP;
    RETURN stmt;
END;
$$ LANGUAGE plpgsql;

即使在我的情况下,我也不认为这是最好的解决方案,但我找不到更好的解决方案。

很多更好的解决方案:

CREATE OR REPLACE FUNCTION get_table_names() 
   RETURNS VARCHAR 
AS 
$$
  SELECT string_agg(table_name,',') 
  FROM information_schema.tables;
$$ 
LANGUAGE sql;