Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将列名传递给函数_Sql_Postgresql_Stored Procedures - Fatal编程技术网

Sql 将列名传递给函数

Sql 将列名传递给函数,sql,postgresql,stored-procedures,Sql,Postgresql,Stored Procedures,如何将列名传递给函数,然后在查询中使用该名称 上述代码不起作用: CREATE OR REPLACE FUNCTION test123(column_name VARCHAR(40)) RETURNS RECORD AS $$ DECLARE rec RECORD ; BEGIN SELECT * INTO rec FROM my_table WHERE column_name=1 LIMIT 1; RETURN rec; END; $$ LANGUAGE plpg

如何将列名传递给函数,然后在查询中使用该名称

上述代码不起作用:

CREATE OR REPLACE FUNCTION test123(column_name VARCHAR(40)) RETURNS RECORD AS $$
DECLARE   
    rec RECORD ;
BEGIN
    SELECT * INTO rec FROM my_table WHERE column_name=1 LIMIT 1;
    RETURN rec;
END;
$$ LANGUAGE plpgsql;

如果要在函数内部的查询中使用函数参数作为标识符,则需要动态执行查询:

error: operator does not exist: character varying = integer
或者更短一些:

CREATE OR REPLACE FUNCTION test123(column_name VARCHAR(40)) RETURNS RECORD AS $$
DECLARE   
    rec RECORD;
BEGIN
    EXECUTE format('SELECT * FROM my_table WHERE %I = 1 LIMIT 1', column_name)
    INTO rec;
    RETURN rec;
END;
$$ LANGUAGE plpgsql;

为此,您需要动态SQL。有关一些示例,请参见手册:
CREATE OR REPLACE FUNCTION test123(column_name VARCHAR(40)) RETURNS RECORD AS $$
BEGIN
    RETURN QUERY EXECUTE format('SELECT * FROM my_table WHERE %I = 1 LIMIT 1', column_name);
END;
$$ LANGUAGE plpgsql;