【发布时间】:2016-03-15 09:46:12
【问题描述】:
所需的设置
为了提高一些代码的优雅,我想知道是否/是否可以与%ROWTYPE variable from table name 做相反的事情——从中提取一个表的名称> 一个%ROWTYPE 或RECORD(最相关的是,在它被传递到一个接受ANYELEMENT 伪类型的函数之后):
CREATE OR REPLACE FUNCTION generic_function(row_data ANYELEMENT)
RETURNS INT AS $$
DECLARE
table_name TEXT = get_table_name(row_data);
BEGIN
-- [ work goes here ]
END;
$$ LANGUAGE plpgsql;
当前的解决方法
CREATE OR REPLACE FUNCTION generic_function(row_data ANYELEMENT, table_name TEXT)
RETURNS INT AS $$
BEGIN
-- [ work goes here ]
END;
$$ LANGUAGE plpgsql;
如果你能想象它在调用代码中的样子,那么这个解决方法感觉有点多余:
SELECT INTO x * FROM mytable WHERE foo = bar;
PERFORM generic_function(x,'mytable');
优雅但愚蠢的解决方案
为了让我在顶部显示呼叫签名,我能想到的最佳解决方案是一种高开销的猜测和检查方法,这可能是一个非常糟糕的主意在生产中使用。你可以找到sqlfiddlehere。
【问题讨论】:
标签: sql postgresql function plpgsql