sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo insertar datos en la tabla usando procedimientos almacenados en postgresql

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 los verdaderos procedimientos almacenados, son:

  1. incapacidad para devolver múltiples conjuntos de resultados
  2. sin soporte para transacciones autónomas (BEGIN, COMMIT y ROLLBACK dentro de una función)
  3. no hay compatibilidad 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' );