1

我有一张tablea如下图所示的表格。

我想通过从前一个插入中tablea获取前一个值来插入一行,即让它成为MAX(pid),所以默认情况下我的数据库中没有任何内容,所以 max 的查询返回 null 所以,然后我需要将 pid 设置为 0当我第一次插入时得到一个空值。

这是我的SQL FIDDLE ,我尝试使用一些 SQL 语句,正如我在 FIDDLE 中评论的那样。

create table tablea(
  sno serial,
  pid integer,
  pname text
  );

-- I am unable to retrieve the null value from the database and store it with pid as 0 so i had inserted this default value

insert into tablea(sno,pid,pname)
values(0,0,'default');


CREATE OR REPLACE FUNCTION insert_details(_pname text)
RETURNS void AS
$BODY$
declare
    _pid int;
begin
_pid := ((select MAX(pid) from tablea)+1);
 insert into tablea(pid,pname)
values(_pid,_pname);
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
4

1 回答 1

0

虽然这不是我在我的数据库中所做的,但这是您的函数的工作示例:

CREATE OR REPLACE FUNCTION insert_details(_pname text)
RETURNS void AS
$BODY$
declare
    _pid int;
begin
   _pid := (select max(pid) from tablea);
   _pid := coalesce(_pid, 0) + 1;

   insert into tablea(pid,pname)
   values(_pid,_pname);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

sql fiddle demo

你可以在没有变量的情况下做到这一点:

CREATE OR REPLACE FUNCTION insert_details(_pname text)
RETURNS void AS
$BODY$
begin
   insert into tablea(pid,pname)
   values (coalesce((select max(pid) from tablea), 0) + 1, _pname);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
于 2013-08-28T08:03:26.283 回答