PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como inserir dados na tabela usando procedimentos armazenados no postgresql


O PostgreSQL não suportava procedimentos armazenados até o PG11. Antes disso, você poderia obter o mesmo resultado usando uma função. Por exemplo:
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;

Você pode então chamá-lo assim:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );

As principais limitações das funções armazenadas do Pg - em comparação com os procedimentos armazenados verdadeiros - são:
  1. incapacidade de retornar vários conjuntos de resultados
  2. sem suporte para transações autônomas (BEGIN, COMMIT e ROLLBACK dentro de uma função)
  3. não há suporte para a sintaxe CALL padrão SQL, embora os drivers ODBC e JDBC traduzam as chamadas para você.

Exemplo

A partir do PG11, o CREATE PROCEDURE é introduzida a sintaxe que fornece suporte para transações.
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 poderia ser chamado com:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );