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行:插入信息
答案 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