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

関数に渡された列に基づいて、関数内の列名を見つけます。それは可能ですか?

4

1 に答える 1

1

いいえ。関数に渡されるのは、式の結果である単なる値です。式がたまたま単一の列名であっても違いはありません。クエリを次のように記述した場合はどうなるでしょうか。

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

それともこれ?

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

これらの場合、関数は列名を何と推測する必要がありますか?

于 2010-06-27T02:50:34.067 に答える