如何在执行sql时在pgSQL函数中使用变量?

时间:2015-04-28 09:14:43

标签: database postgresql variables

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”而不是函数的给定参数。

1 个答案:

答案 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;