[英]How to insert data into table using stored procedures in postgresql
CREATE TABLE app_for_leave
(
sno integer NOT NULL,
eid integer,
ename varchar(20),
sd date,
ed date,
sid integer,
status boolean DEFAULT false,
CONSTRAINT pk_snoa PRIMARY KEY (sno)
);
基本插入是::
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(1,101,'2013-04-04','2013-04-04',2,'f' );
...
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) VALUES (?, ?, ?, ?, ?, ?);
我的要求::如何使用存储过程将数据插入表中?
在PG11之前,PostgreSQL 不支持存储过程 。 在此之前,您可以使用函数获得相同的结果。 例如:
CREATE FUNCTION MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
RETURNS void AS
$BODY$
BEGIN
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
然后你可以像这样调用它:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
与真实存储过程相比,Pg存储函数的主要限制是:
从PG11开始, CREATE PROCEDURE
语法介绍其提供的交易支持。
CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
LANGUAGE SQL
AS $BODY$
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
$BODY$;
可以用以下方式调用:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
从PostgreSQL 11开始,您可以创建存储过程并使用CALL调用它们:
CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date,
_ed date, _sid integer, _status boolean)
LANGUAGE SQL
AS $$
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
$$;
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
此外,它允许处理交易
SQL存储过程
PostgreSQL 11引入了SQL存储过程,允许用户在过程中使用嵌入式事务(即BEGIN,COMMIT / ROLLBACK)。 可以使用CREATE PROCEDURE命令创建过程,并使用CALL命令执行。
PostgreSQL不支持存储过程 ,但您可以使用函数获得相同的结果。
无论您要插入表中的数据是作为要创建的函数的参数给出的。
CREATE OR REPLACE表示如果数据库中已存在具有相同名称的函数(您正在使用),则它将被替换,否则如果不存在具有相同名称的函数,则将创建新函数。
您必须在函数体内编写insesrtion查询。
CREATE OR REPLACE FUNCTION Insert_into_table(_sno INTEGER, _eid INTEGER, _ename VARCHAR(20), _sd DATE, _ed DATE, _sid INTEGER)
RETURNS void AS
$BODY$
BEGIN
INSERT INTO app_for_leave(sno, eid, sd, ed, sid)
VALUES(_sno, _eid, _sd, _ed, _sid);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
正如您在表中已经提到的 Status 列的默认值 , 现在不需要将数据插入该列
这是您理解的SQLFiddle链接
CREATE OR REPLACE FUNCTION new_bolshek(parent_id bigint, _key text, _value text, enabled boolean)
RETURNS SETOF bolshekter AS
$BODY$
DECLARE
new_id integer;
returnrec bolshekter;
BEGIN
INSERT INTO bolshekter(parent_id, content_key, content_value, enabled)
VALUES(parent_id, _key, _value, enabled) RETURNING id INTO new_id;
FOR returnrec IN SELECT * FROM bolshekter where id=new_id LOOP
RETURN NEXT returnrec;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.