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;