我有一个像这样的PL / pgsql函数
CREATE OR REPLACE FUNCTION foo(colname TEXT, col INT)
RETURNS REAL AS $$
BEGIN
IF (colname = 'a') THEN
RETURN (col * 1.5);
ELSIF (colname = 'b') THEN
RETURN (col * 2.5);
ELSIF (colname = 'c') THEN
RETURN (col * 3.5);
.. and so on ..
ELSE
RAISE EXCEPTION 'Invalid column!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
该功能允许我做像
这样的事情SELECT foo('a', a) FROM table WHERE
我想使这个更好,而不必传递列名,如果我可以帮助它。换句话说,我希望能够做到
SELECT foo(a) FROM table WHERE
并根据传递给函数的col计算函数中的列名。这可能吗?
答案 0 :(得分:1)
没有。传递给函数的只是一个表达式结果的值。您的表达式恰好是单个列名称没有区别。如果您要编写这样的查询怎么办?
SELECT foo(a+2) FROM table WHERE ...
还是这个?
SELECT foo(2+2) FROM table WHERE ...
在这些情况下,函数应该推断出列名是什么?