首页 > 解决方案 > 在带有 sql 和 sh 脚本的函数中使用变量

问题描述

我正在开发一组将由 .sh 脚本调用的 .sql 脚本。在这个 .sh 脚本中,我使用以下命令:

psql "connection parameters" -f ./myscript.sql -v var1 = "schema.table"

目前一切都很好。

在我的 .sql 脚本中,我目前有这个:

CREATE or replace FUNCTION myFunction (tarteenpion varchar) RETURNS void AS $$
DECLARED
   MONTH_MM varchar: = to_char (current_timestamp, 'MM');
   YEAR_AAAA varchar: = to_char (current_timestamp, 'YYYY');
   YEAR_AA varchar: = to_char (current_timestamp, 'YY')
   cmd varchar: = 'DROP TABLE IF EXISTS' || tarteenpion || ';' ;
BEGIN
   execute cmd;
END;
$$ LANGUAGE plpgsql;

--SELECT myFunction ('schema.table');
SELECT myFunction (: var1);
DROP FUNCTION myFunction (tarteenpion varchar);

我的问题来自使用我的外部变量:var1 - 如果我直接用'写我的值'schema.table',函数运行正确。但我不想那样。

选择我的函数(:var1);=> 错误:缺少表“模式”的 FROM 子句条目

第 1 行:选择 myFunction (schema.table);

所以它被函数解释为不可用。

选择 myFunction (':var1'); => 错误:“:”处或附近的语法错误

第 1 行:如果存在则删除表:var1

所以它不被解释,而是被函数使用。

能否指导我找到困扰我很久的解决方案。谢谢 :)

标签: postgresqlfunctionvariablesplpgsql

解决方案


您可以psql用单引号引用变量值:

SELECT myFunction (:'var1');

那将被替换为

SELECT myFunction ('schema.table');

推荐阅读