sql - ppgsql从参数声明变量
问题描述
我正在从命令行运行 sql 查询,我在其中传入名为 tablename 的值:
psql "hostname" -v tablename=$1 -a -q -f "filename.sql"
然后我像这样设置变量:
\set tablename :tablename
然后我有一个函数,我想像这样使用变量表名:
DO $$
BEGIN
if (tablename = 'movie_table') then
-- query goes in here
END if;
END;
$$;
我还尝试使用以下几种变体来声明变量:
DECLARE tablename varchar := :tablename;
如果您有任何建议,请告诉我。我收到以下错误:
syntax error at or near ":"
解决方案
您的代码无法工作,因为您尝试在服务器端(plpgsql)读取客户端变量(psql)。您需要将值推送到自定义服务器端变量,在下一步中您可以从 plpgsql 环境中读取它:
postgres=# \set client_side_var Ahoj
postgres=# select set_config('my.client_side_var', :'client_side_var', false);
┌────────────┐
│ set_config │
╞════════════╡
│ Ahoj │
└────────────┘
(1 row)
postgres=# do $$
declare var text default current_setting('my.client_side_var');
begin
raise notice '>>>%<<<', var;
end;
$$;
NOTICE: >>>Ahoj<<<
DO
您不能:var
在 plpgsql 代码中使用 psql 语法。
推荐阅读
- optimization - 任何 NEON 指令都可以在 Cortex A53 或 A55 上通过向量长乘累加 (SMLAL) 双重发出?
- reactjs - 在 componentDidUpdate 上 setState 到窗口变量一次
- javascript - 角度不确定复选框功能不起作用
- batch-file - 我们可以使用 if 条件来比较 BATCH SCRIPT 中的两个日期吗?
- karate - 空手道:问号被编码为路径的一部分
- r - 强制绘图在中间有“0”,并且在 R 中为 + 和 - 值等量缩放
- c# - 如何使用数据库优先更改连接字符串
- ios - 转换后获取不正确的日期格式
- python - 如何解决 Jupyter Notebook 中的内核错误?(win64)
- postgresql - 如何动态地将列添加到 PostgreSQL SQL where 子句