1

以下に示すようなテーブルがありtableaます。

tablea前の挿入から前の値を取得してに行を挿入したい、つまり、それMAX(pid)を初めて挿入中にnullを取得したとき。

これは、 FIDDLE でコメントしたように、いくつかの SQL ステートメントを使用して試した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 に答える