Postgresql字符串连接:错误:语法错误位于或接近;味精;

Postgresql字符串连接:错误:语法错误位于或接近;味精;,postgresql,runtime-error,string-concatenation,stored-functions,Postgresql,Runtime Error,String Concatenation,Stored Functions,我试图使用连接消息在Postgresql函数中引发问题,但在运行时收到错误消息: error: syntax error at or near "msg" 代码如下: CREATE OR REPLACE FUNCTION insertUserAccount( id bigint, nname varchar(40), email varchar(40), pwd varchar,

我试图使用连接消息在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中使用
:=
在PL/pgSQL中使用
:=
在PL/pgSQL中使用
:=
在PL/pgSQL中使用
:=
在PL/pgSQL中使用的实际问题是的语法错误。我将总体简化:

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中分配的数量相当昂贵(与其他编程语言相比)。不是很戏剧性,但仍然..

实际问题是的语法错误。我将总体简化:

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中分配的数量相当昂贵(与其他编程语言相比)。不是很戏剧性,但仍然..

实际问题是的语法错误。我将总体简化:

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中分配的数量相当昂贵(与其他编程语言相比)。不是很戏剧性,但仍然..

实际问题是的语法错误。我将总体简化:

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中分配的数量相当昂贵(与其他编程语言相比)。不太夸张,但仍然..

在PL/pgSQL中使用
:=
。谢谢,如果您创建了一个答案,我会批准它。虽然
:=
是一个很好的建议,但它无法解释错误。细节。取决于你的博士后版本。在最近的版本中有多个更新。请在PL/pgSQL中使用
:=
。谢谢,如果您创建了一个答案,我会批准它。虽然
:=
是一个很好的建议,但它无法解释错误。细节。取决于你的博士后版本。在最近的版本中有多个更新。请在PL/pgSQL中使用
:=
。谢谢,如果您创建了一个答案,我会批准它。虽然
:=
是一个很好的建议,但它无法解释错误。细节。取决于你的博士后版本。在最近的版本中有多个更新。请在PL/pgSQL中使用
:=
。谢谢,如果您创建了一个答案,我会批准它。虽然
:=
是一个很好的建议,但它无法解释错误。细节。取决于你的博士后版本。在最近的版本中有几个更新。我必须使用ERRCODE='23505'更改raiseexception msg;使用ERRCODE='23505'引发异常“%”,msg;我必须使用ERRCODE='23505'更改raiseexceptionmsg;使用ERRCODE='23505'引发异常“%”,msg;我必须使用ERRCODE='23505'更改raiseexceptionmsg;使用ERRCODE='23505'引发异常“%”,msg;我必须使用ERRCODE='23505'更改raiseexceptionmsg;使用ERRCODE='23505'引发异常“%”,msg;让它也能工作。