在EDB中,\set命令用于设置变量,例如\set detpno 80,在插入时可以使用实际值的:deptno安装,如
insert into dept values (:deptno, 'SALES', 'HYD');它运行良好,但是当我在过程中使用它或匿名阻止它的抛出错误时。
简单匿名块
begin
insert into dept values (:deptno, 'SALES', 'LONDON');
end;当我执行这个块时,我会出现以下错误
错误:在":“处或附近出现语法错误
第2行:插入dept1值(:deptno,'SALES','BAN');
请帮助我在过程或函数中使用\set变量。
发布于 2020-01-06 17:08:15
将:varname替换为以前\set的内容是特定数据库客户端的一个特性,即"psql“(尽管其他客户机可能已经模仿了这种行为)。这不是数据库本身的特性。数据库没有看到:varname,它只看到被替换的内容。
当您使用匿名代码块时,您将传递客户端的替换行为。
也许您应该创建一个函数,它以正确的方式声明它接受哪些参数,而不是使用类似shell的变量插值。
发布于 2020-01-06 18:26:43
psql变量不能在服务器端代码-匿名块中使用。这是不允许的-替换在字符串中被阻塞。你可以找个解决办法。
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在这种情况下非常相似。
https://stackoverflow.com/questions/59609845
复制相似问题