Postgresql 字符串连接:错误:“msg”处或附近的语法错误
Posted
技术标签:
【中文标题】Postgresql 字符串连接:错误:“msg”处或附近的语法错误【英文标题】:Postgresql string concatenation: error: syntax error at or near "msg" 【发布时间】:2014-03-20 08:33:20 【问题描述】:我正在尝试使用串联消息在 Postgresql 函数中提出问题,但在运行时收到错误消息:
error: syntax error at or near "msg"
代码如下:
CREATE OR REPLACE FUNCTION insertUserAccount(
id bigint,
nname varchar(40),
email varchar(40),
pwd varchar,
status smallint,
last_update bigint,
preferences json,
bits integer,
adm json)
RETURNS bigint AS $$
DECLARE
rowc INTEGER;
ret_id bigint;
msg text;
BEGIN
...
IF ( rowc > 0 ) THEN
msg = 'User account already exists or name or email is unavailable (id=' || id
|| ', name=' || nname
|| ', email=' || email || ')';
RAISE EXCEPTION msg USING ERRCODE = '23505';
ELSE
...
【问题讨论】:
在 PL/pgSQL 中将:=
用于assignment。
谢谢,如果你创建一个答案,我会批准它。
虽然:=
是个好建议,但它无法解释错误。详情here。 Syntax options for RAISE
取决于您的 Postgres 版本。最近的版本有几个更新。
【参考方案1】:
实际问题是RAISE EXCEPTION
的语法错误。我会整体简化:
IF rowc > 0 THEN
RAISE EXCEPTION 'User account already exists or name or email is unavailable (id=%,name=%,email=%)'
, id, nname, email USING ERRCODE = '23505';
ELSE ...
那时可能根本不需要变量msg
。通常最好将分配的数量保持在较低水平,因为这些在 PL/pgSQL 中相当昂贵(与其他编程语言相比)。没有戏剧性,但仍然......
【讨论】:
【参考方案2】:在 PL/pgSQL 中将:=
用于assignment
【讨论】:
我不得不改变 RAISE EXCEPTION msg USING ERRCODE = '23505';进入 RAISE EXCEPTION '%', msg USING ERRCODE = '23505';让它也能工作。以上是关于Postgresql 字符串连接:错误:“msg”处或附近的语法错误的主要内容,如果未能解决你的问题,请参考以下文章