Este equipo especializado luego de algunos días de investigación y de recopilar de información, han obtenido la solución, queremos que resulte de utilidad en tu proyecto.
Solución:
PostgreSQL no admitió procedimientos almacenados hasta PG11. Antes de eso, podría obtener el mismo resultado usando una función. Por ejemplo:
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;
A continuación, puede llamarlo así:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Las principales limitaciones de las funciones almacenadas de Pg, en comparación con true procedimientos almacenados – son:
- incapacidad para devolver múltiples conjuntos de resultados
- sin soporte para transacciones autónomas (BEGIN, COMMIT y ROLLBACK dentro de una función)
- no es compatible con la sintaxis CALL estándar de SQL, aunque los controladores ODBC y JDBC traducirán las llamadas por usted.
Ejemplo
A partir de PG11, el CREATE PROCEDURE
se introduce la sintaxis que proporciona soporte para transacciones.
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$;
Que podría llamarse con:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
A partir de PostgreSQL 11, puede crear procedimientos almacenados e invocarlos usando 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' );
Además, permite manejar transacciones
Procedimientos almacenados de SQL
PostgreSQL 11 introduce procedimientos almacenados de SQL que permiten a los usuarios utilizar transacciones incrustadas (es decir, BEGIN, COMMIT/ROLLBACK) dentro de un procedimiento. Los procedimientos se pueden crear con el comando CREATE PROCEDURE y ejecutarse con el comando CALL.
PostgreSQL no admite procedimientos almacenadospero puede obtener el mismo resultado usando una función.
Cualesquiera que sean los datos que desea insertar en la tabla, se proporcionan como parámetros para la función que está creando.
CREAR O REEMPLAZAR representa si una función con el mismo nombre (que está utilizando) ya está presente en la base de datos, entonces será reemplazada o si no hay ninguna función con el mismo nombre presente, se creará una nueva función.
Tienes que escribir la consulta de inserción dentro del cuerpo de la función.
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;
Como ya ha mencionado en la tabla, un valor predeterminado para la columnaEstado, ahora no es necesario insertar datos en esa columna
Aquí está el violín SQL Enlace para su comprensión