postgresql中的插入函数出错

时间:2015-12-08 05:27:32

标签: postgresql-9.1

CREATE OR REPLACE FUNCTION InsertInformation  
(  
    p_Name varchar(20)  
    ,p_Address varchar(250)  
    ,p_Mobile int  
) RETURNS VOID  
    as $$
    begin   
    declare v_ID int;
    BEGIN

select  coalesce(max(Id),0) into v_ID from Information  
set; v_ID=v_ID+1  

insert into Information  
(  
    Id  
    ,Name  
    ,Address  
    ,Mobile  
)  
values  
(  
    v_ID  
    ,p_Name  
    ,p_Address  
    ,p_Mobile  
)  
select v_ID;
$$ 
LANGUAGE plpgsql;

我使用在线转换工具将我的sql insert sp转换为Postgres函数,但它显示下面提到的错误

错误显示:错误:语法错误在或附近"插入" 第16行:插入信息

1 个答案:

答案 0 :(得分:0)

此:

select  coalesce(max(Id),0) into v_ID from Information  
set; v_ID=v_ID+1  

错了。

select未正确终止,set本身是非法语法。

你可能想要这个:

select  coalesce(max(Id),0)
    into v_ID 
from Information; --<< terminate with a ; here
v_id := v_id + 1; --<< terminate with a ; here

但首先,额外的任务并非必要。以上内容可以缩短为:

select  coalesce(max(Id),0) + 1
    into v_ID 
from Information;

这个

select v_ID;

也错了。要返回值,请使用:

return v_id;

但是您的功能被定义为returns void,因此您无法在第一时间返回任何内容。

:使用select coalesce(max(Id),0) + 1生成唯一ID是错误的,并且 在现实世界的应用程序中正常工作。

生成新ID的唯一正确,可扩展且快速的方法是使用序列。真。

完整的功能(如果你想返回新的&#34;生成的&#34; id)将如下所示:

CREATE OR REPLACE FUNCTION InsertInformation(p_Name varchar(20),p_Address varchar(250),p_Mobile int) 
  RETURNS integer  
as 
$$
declare 
  v_ID int;
BEGIN

  select coalesce(max(Id),0)  + 1 
     into v_ID 
  from Information;

  INSERT INTO information
    (id, name, address, mobile)
  VALUES
    (v_id, p_name, p_address, p_mobile);

  return v_id;
END;

$$ 
LANGUAGE plpgsql;

SQLFiddle示例:http://sqlfiddle.com/#!15/4ac27/1