PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment insérer des données dans une table à l'aide de procédures stockées dans postgresql

PostgreSQL ne supportait pas les procédures stockées jusqu'à PG11. Avant cela, vous pouviez obtenir le même résultat en utilisant une fonction. Par exemple :

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;

Vous pouvez ensuite l'appeler ainsi :

select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );

Les principales limitations des fonctions stockées de Pg - par rapport aux véritables procédures stockées - sont :

  1. impossibilité de renvoyer plusieurs ensembles de résultats
  2. pas de prise en charge des transactions autonomes (BEGIN, COMMIT et ROLLBACK au sein d'une fonction)
  3. pas de prise en charge de la syntaxe CALL standard SQL, bien que les pilotes ODBC et JDBC traduisent les appels pour vous.

Exemple

A partir de PG11, la CREATE PROCEDURE syntaxe est introduite qui prend en charge les transactions.

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$;

Qui pourrait être appelé avec :

CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );