PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come inserire i dati nella tabella usando le stored procedure in postgresql

PostgreSQL non supportava le stored procedure fino a PG11. Prima di ciò, potresti ottenere lo stesso risultato usando una funzione. Ad esempio:

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;

Puoi quindi chiamarlo così:

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

Le principali limitazioni delle funzioni memorizzate di Pg, rispetto alle vere procedure memorizzate, sono:

  1. impossibilità di restituire più set di risultati
  2. nessun supporto per transazioni autonome (BEGIN, COMMIT e ROLLBACK all'interno di una funzione)
  3. nessun supporto per la sintassi CALL standard SQL, anche se i driver ODBC e JDBC tradurranno le chiamate per te.

Esempio

A partire da PG11, il CREATE PROCEDURE viene introdotta la sintassi che fornisce supporto per le transazioni.

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

Che potrebbe essere chiamato con:

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