variables - 在函数声明中使用 psql 环境
问题描述
我没有在函数声明中使用参数。
一个 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 正确替换为其值。
解决方案是什么?
解决方案
似乎 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
推荐阅读
- java - 使用 Java 在 geckodriver 上禁用 selenium 驱动程序检测
- stripe-payments - Stripe 订阅事件 webhook 不清楚
- python - 为什么我的扫雷方块没有点击右键?
- java - Android:如何将单选按钮的文本设置为整数?
- python - 生成缓冲区半径多边形 - 可能的投影问题
- wcf - WCF Web 服务和 TPL Task.Run
- r - 在R中的一个图中合并两个相邻的图(没有ggplot)
- reactjs - 当我每次单击按钮时数字是奇数时,我想添加一个框。想法?
- c++ - 如何修复 Mac 上 VisualStudioCode 中的“clang:错误:不支持的选项 '-fopenmp'”问题
- python-3.x - 遍历数据框并对范围内的值进行分组