首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EDB Postgresql中的set命令

EDB Postgresql中的set命令
EN

Stack Overflow用户
提问于 2020-01-06 09:47:39
回答 2查看 263关注 0票数 0

在EDB中,\set命令用于设置变量,例如\set detpno 80,在插入时可以使用实际值的:deptno安装,如

代码语言:javascript
复制
insert into dept values (:deptno, 'SALES', 'HYD');

它运行良好,但是当我在过程中使用它或匿名阻止它的抛出错误时。

简单匿名块

代码语言:javascript
复制
begin
insert into dept values (:deptno, 'SALES', 'LONDON');
end;

当我执行这个块时,我会出现以下错误

错误:在":“处或附近出现语法错误

第2行:插入dept1值(:deptno,'SALES','BAN');

请帮助我在过程或函数中使用\set变量。

EN

回答 2

Stack Overflow用户

发布于 2020-01-06 17:08:15

将:varname替换为以前\set的内容是特定数据库客户端的一个特性,即"psql“(尽管其他客户机可能已经模仿了这种行为)。这不是数据库本身的特性。数据库没有看到:varname,它只看到被替换的内容。

当您使用匿名代码块时,您将传递客户端的替换行为。

也许您应该创建一个函数,它以正确的方式声明它接受哪些参数,而不是使用类似shell的变量插值。

票数 0
EN

Stack Overflow用户

发布于 2020-01-06 18:26:43

psql变量不能在服务器端代码-匿名块中使用。这是不允许的-替换在字符串中被阻塞。你可以找个解决办法。

  1. 设置一个自定义guc变量(自定义配置值)。请求前缀'xx‘。

postgres=# \设置myval AHOJ postgres=#选择set_config('xx.myval',:'myval',false);┌────────────┐│set_config│╞════════════╡│AHOJ│└────────────┘(1行)

  • 现在可以在服务器端通过函数current_setting读取该值。

postgres=# do $$开始发出通知'%',current_setting('xx.myval');结束;$$;通知: AHOJ DO

目前,没有任何其他方法可以做到这一点。这是Postgres,但EDB在这种情况下非常相似。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59609845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档