PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So fügen Sie Daten mit gespeicherten Prozeduren in Postgresql in eine Tabelle ein

PostgreSQL hat bis PG11 keine gespeicherten Prozeduren unterstützt. Zuvor konnten Sie dasselbe Ergebnis mit einer Funktion erzielen. Zum Beispiel:

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;

Sie können es dann so nennen:

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

Die Haupteinschränkungen der gespeicherten Funktionen von Pg im Vergleich zu echten gespeicherten Prozeduren sind:

  1. Unfähigkeit, mehrere Ergebnissätze zurückzugeben
  2. keine Unterstützung für autonome Transaktionen (BEGIN, COMMIT und ROLLBACK innerhalb einer Funktion)
  3. keine Unterstützung für die SQL-Standard-CALL-Syntax, obwohl die ODBC- und JDBC-Treiber Aufrufe für Sie übersetzen.

Beispiel

Beginnend mit PG11, dem CREATE PROCEDURE Syntax eingeführt, die Transaktionen unterstützt.

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

Was aufgerufen werden könnte mit:

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