1

我有一个像这样的 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 找出函数中的列名。那可能吗?

4

1 回答 1

1

不,传递给函数的只是表达式结果的值。您的表达式恰好是单个列名,这没有什么区别。如果你要这样写查询怎么办?

SELECT foo(a+2) FROM table WHERE ...

或这个?

SELECT foo(2+2) FROM table WHERE ...

在这些情况下,函数应该如何推断列名?

于 2010-06-27T02:50:34.067 回答