gpt4 book ai didi

sql - 返回动态列集

转载 作者:行者123 更新时间:2023-11-29 12:27:44 25 4
gpt4 key购买 nike

我创建了以下函数以根据该函数的参数返回列集:

CREATE OR REPLACE FUNCTION getColumns(IN _column1 text, IN _column2 text, IN _column3 text, IN _column4 text, IN _table text)
RETURNS TABLE(cmf1 text, cmf2 text, cmf3 text, cmf4 text) AS
$BODY$
BEGIN
RETURN QUERY EXECUTE
'SELECT '
|| case when _column1 = 'None' then quote_literal('None') else quote_ident(_column1) end || '::text as cmf1,'
|| case when _column2 = 'None' then quote_literal('None') else quote_ident(_column2) end || '::text as cmf2,'
|| case when _column3 = 'None' then quote_literal('None') else quote_ident(_column3) end || '::text as cmf3,'
|| case when _column3 = 'None' then quote_literal('None') else quote_ident(_column3) end || '::text as cmf4'
' FROM '
|| _table;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;

使用示例表:

CREATE TABLE test20130205
(
a text,
b text,
c character varying,
d text
);

我可以通过以下方式使用该函数:

select * from getColumns('a','b','c','d','test20130205');

我确实有以下问题:

  • 我如何扩展此函数以将任意数量的列作为输入(目前我限制为 4),例如:

    getColumns([textColumn1,...,textColumnN],'table')
  • 目前,我必须使用“无”作为参数值,以防我需要的列少于 4 列,有没有办法避免这种情况?我认为这将通过回答上一个问题自动解决

  • 我能否以某种方式在输出中保留数据类型?如果没有,我可以使用更多的数组参数吗?该函数将如下所示:

    getColumns(
    [textColumn1,...,textColumnN],
    [numericColumn1,...,numericColumnM],
    [dateColumn1,...,dateColumnO],
    [intColumn1,...,intColumnP],
    'table'
    )

最佳答案

如果所有列共享相同的类型,您可以使用数组进行操作。

更灵活的解决方案是使用 polymorphic function , 传入类型为 anyelement 的参数,并让函数返回相同的多态类型。这个参数可以是众所周知的复合类型...

这是相当高级的服务器端编程。您可以在 this closely related answer 中找到这两种方法的代码示例以及解释和链接。 .

关于sql - 返回动态列集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com