我无法在函数声明中使用参数。
SQL脚本,如:
CREATE OR REPLACE FUNCTION test_functon() RETURNS trigger AS
$BODY$
DECLARE
test int:=:SRID;
BEGIN
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
在文件中。
并运行psql -v SRID=2056 -f my_file.sql
导致错误
错误:“:”或附近的语法错误
这看起来像是在运行SQL时,没有用其值正确替换var。
对此有什么解决方案?
答案 0 :(得分:1)
psql似乎不会在函数体内插值变量。
以下SQL对此进行验证。
SELECT :SRID;
CREATE OR REPLACE FUNCTION test_functon() RETURNS :TYPE AS
$BODY$
BEGIN
RETURN :SRID;
END;
$BODY$
LANGUAGE plpgsql;
运行该文件将导致以下结果:
$ psql -v SRID=2056 -v TYPE=int -f query.sql
Expanded display is used automatically.
Null display is "¤".
?column?
----------
2056
(1 row)
psql:query.sql:9: ERROR: syntax error at or near ":"
LINE 4: RETURN :SRID;
^
请注意,变量TYPE
所定义的返回类型仍是如何插值的,但体内的所有内容均超出了限制。
您将不得不采用另一种机制来将变量放入其中。您可以利用以下事实:psql通过STDIN接受查询:
$ sed 's/:SRID/2056/' query.sql | psql