Как вставить данные в таблицу с помощью хранимых процедур в 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 (?, ?, ?, ?, ?, ?);
мое требование:: как вставить данные в таблицу с помощью хранимых процедур?
4 ответов
PostgreSQL не поддерживает хранимые процедуры, per se, но вы можете получить тот же результат, используя функцию. Например:
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 по сравнению с истинными хранимыми процедурами являются:
- невозможность возврата нескольких наборов результатов
- нет поддержки автономных транзакций (начало, фиксация и откат в пределах функция)
- нет поддержки синтаксиса вызова SQL-standard, хотя драйверы ODBC и JDBC будут переводить вызовы для вас.
начиная с PostgreSQL 11 вы могли бы создать хранимые процедуры и вызвать их с помощью вызов:
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, которые позволяют пользователям использовать встроенные транзакции (т. е. начало, фиксация/откат) в a процедура. процедуры могут быть созданы с помощью CREATE ПРОЦЕДУРА команда и выполняется с помощью команды CALL.
PostgreSQL не поддерживает хранимые процедуры, но вы можете получить тот же результат с помощью функции.
любые данные, которые вы хотите вставить в таблицу, задаются в качестве параметров создаваемой функции.
СОЗДАТЬ ИЛИ ЗАМЕНИТЬ представляет, если функция с тем же именем (вы используете) уже присутствует в базе данных, то она будет заменена или иначе, если нет функции с тем же именем, то новая функция будет создан.
вы должны написать запрос 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;
Как вы уже отметили в таблице значение по умолчанию для столбца статус, теперь нет необходимости вставлять данные в этот столбец
здесь 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;