\EDB Postgresql中的set命令
在EDB Postgres中,\EDB Postgresql中的set命令,postgresql,stored-procedures,plpgsql,Postgresql,Stored Procedures,Plpgsql,在EDB Postgres中,\set命令用于设置变量,例如\set detpno 80,在插入时,我们可以使用:deptno设置实际值,例如 insert into dept values (:deptno, 'SALES', 'HYD'); 它工作得很好,但当我在过程中使用它或匿名阻止它的抛出错误时 简单匿名块 begin insert into dept values (:deptno, 'SALES', 'LONDON'); end; 当我执行这个块时,我得到的是低于错误值的值 错误
\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变量。将:varname替换为以前\set的内容是特定数据库客户端的一项功能,即“psql”(尽管可能其他客户端也模拟了此行为)。它不是数据库本身的一项功能。数据库没有看到:varname,它只看到它被替换的内容 当您使用匿名代码块时,您是通过传递客户端的替换行为来实现的
也许您应该创建一个函数,该函数以适当的方式声明它需要哪些参数,而不是使用类似shell的变量插值。psql变量不能在服务器端代码匿名块中使用。这是不允许的-替换被阻止在字符串中。您可以使用变通方法
postgres=# \set myval AHOJ
postgres=# select set_config('xx.myval', :'myval', false);
┌────────────┐
│ set_config │
╞════════════╡
│ AHOJ │
└────────────┘
(1 row)
当前\u设置
读取值
postgres=# do $$
begin
raise notice '%', current_setting('xx.myval');
end;
$$;
NOTICE: AHOJ
DO
目前没有任何其他方法可以做到这一点。这是Postgres-但EDB在这种情况下非常类似。您好,欢迎来到StackOverFlow。您能为我们\d+表名吗?所以我们可以复制你的问题,这能回答你的问题吗?谢谢@Pavel Stehule