参数没有从Postgres函数中获取值



我有一个简单的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;

最新更新