postgresql - 确定传递给 Pg 函数的列名

标签 postgresql plpgsql

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

最佳答案

没有。传递给函数的只是一个表达式的结果值。您的表达式恰好是单个列名没有区别。如果您要像这样编写查询会怎样?

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

还是这个?

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

在这些情况下,函数应该推断列名是什么?

关于postgresql - 确定传递给 Pg 函数的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126009/

相关文章:

c# - Postgres 连接上的 System.Net.Sockets.SocketException

在 postgreSQL 中删除重音的函数

PostgreSQL 9.3 :Dynamic Cross tab query

sql - PostgreSQL 函数从动态表名称返回结果集

exception-handling - 捕获所有错误 psql 函数异常

postgresql - 在 sequelize 上运行迁移时出错

python - 在 Cloud DataFlow 上运行我的代码时出现 ImportError : No module named psycopg2. 扩展

postgresql - 如何在 PostgreSQL 中调试触发器递归?

sql - 带有 CASE 的 Postgres 自定义函数

postgresql - 如何创建不返回任何内容的函数