CREATE OR REPLACE FUNCTION drop_table(varchar) RETURNS VOID AS $$
DECLARE
tablename ALIAS FOR $1;
counter integer;
BEGIN
--compute the counter variable, then continue:
IF counter > 0 THEN EXECUTE 'DROP TABLE tablename'; --TODO: how to use variable here?
END IF;
END;
$$ LANGUAGE plpgsql;
如何在tablename
语句中使用变量EXECUTE
?目前,sql将使用名称“tablename”而不是函数的给定参数。
答案 0 :(得分:1)
您可以在PostgreSQL中使用format()
按照文件:
格式化字符串。此功能类似于C函数sprintf; 但只能识别以下转换规范:%s 将相应的参数插入为字符串; %我逃脱了它 参数作为SQL标识符; %L将其参数作为SQL转义 文字; %%输出文字%。转换可以引用 通过转换说明符前面的显式参数位置 n $,其中n是参数位置。
select format('Hello %s','World')
结果
format
text
---------------
Hello World
所以你的功能应该是:
CREATE OR REPLACE FUNCTION drop_table(varchar) RETURNS VOID AS $$
DECLARE
tablename ALIAS FOR $1;
counter integer;
BEGIN
--compute the counter variable, then continue:
IF counter > 0 THEN
EXECUTE format('DROP TABLE %s',tablename); -- or you can directly give argument here ie format('DROP TABLE %s',$1)
END IF;
END;
$$ LANGUAGE plpgsql;