我有一个简单的Postgres函数,我想把table_name作为一个参数,并把它传递给一个参数,并根据条件从表中删除数据。
CREATE OR REPLACE FUNCTION cdc.audit_refresh(tablename text)
RETURNS integer AS
$$
BEGIN
delete from tablename where id<4;
RETURN(select 1);
END;
$$ LANGUAGE plpgsql;
select cdc.audit_refresh('cdc.adf_test');
但是它抛出一个错误,表名错误:relation "tablename"在delete语句中不存在。(参考快照)
您想要实现的是执行动态SQL语句。你可以对EXECUTE
这样做。点击这里查看更多信息
CREATE OR REPLACE FUNCTION audit_refresh(tablename text)
RETURNS integer AS
$$
DECLARE
stmt TEXT;
BEGIN
stmt = 'delete from '||tablename||' where id<4;';
EXECUTE stmt;
RETURN 1;
END
$$ LANGUAGE plpgsql;