exe*_*ook 3 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 plpgsql;
Run Code Online (Sandbox Code Playgroud)
如何将列名传递给函数,然后在查询中使用该名称?
上面的代码不起作用:
error: operator does not exist: character varying = integer
Run Code Online (Sandbox Code Playgroud)
当您想在函数内的查询中使用函数参数作为标识符时,您需要动态EXECUTE查询:
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;
Run Code Online (Sandbox Code Playgroud)
或更短:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2961 次 |
| 最近记录: |