Определение имени столбца, переданного в функцию Pg - PullRequest
1 голос
/ 27 июня 2010

У меня есть функция 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

и определите имя столбца в функции на основе столбца, переданного в функцию. Это возможно?

1 Ответ

1 голос
/ 27 июня 2010

Нет.То, что передается в функцию, является просто значением, которое является результатом выражения.Не имеет значения, что ваше выражение является именем одного столбца.Что если вы напишете запрос, подобный этому?

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

Или вот это?

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

Что должна делать функция, чтобы вывести имя столбца в этих случаях?

...