【发布时间】:2015-12-12 14:48:49
【问题描述】:
我在 Postgres 9.4.5 中有一个类似下面的场景:
CREATE OR REPLACE FUNCTION something(varA text) RETURNS void AS $$
BEGIN
...
RAISE INFO '%',varA;
END;
$$
LANGUAGE plpgsql;
DO
$$
declare
varA text := :cmd_line_arg;
begin
perform something(varA);
end;
$$
所有这些都驻留在某个文件 plpgsql.sql 中,并像这样执行:
psql -v cmd_line_arg='value' -U postgres -d postgres -f plpgsql.sql
我收到syntax error at or near':'
我在使用字符串连接运算符|| 时也发现了错误。
我在这里缺少什么?和DO有关系吗?
注意:link 没有帮助。
【问题讨论】:
-
perform 可以在函数外使用吗?我相信它没有那样工作,所以我使用了 th do block
-
你是对的。我把它误认为
PREPARE。无论如何,请尝试将您的cmd_line_arg包含在' '中。 -
不幸的是,将其包含在
''中,将其作为文字字符串而不是使用值。 -
这可能是由于
DO块。你能试试SELECT 1 FROM something(:'cmd_line_arg') LIMIT 0而不是你的DO块吗?您也可以尝试不使用' ',但我认为这也适用于您的 pg 版本 -
不,这也不起作用。我也试过
select something(:'cmd_line_arg'),也失败了。
标签: postgresql plpgsql psql