sql >> Database >  >> RDS >> PostgreSQL

Gegevens in een tabel invoegen met behulp van opgeslagen procedures in postgresql

PostgreSQL ondersteunde geen opgeslagen procedures tot PG11. Daarvoor kon je hetzelfde resultaat krijgen met een functie. Bijvoorbeeld:

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;

Je kunt het dan zo noemen:

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

De belangrijkste beperkingen van de opgeslagen functies van Pg - in vergelijking met echte opgeslagen procedures - zijn:

  1. onmogelijkheid om meerdere resultatensets te retourneren
  2. geen ondersteuning voor autonome transacties (BEGIN, COMMIT en ROLLBACK binnen een functie)
  3. geen ondersteuning voor de SQL-standaard CALL-syntaxis, hoewel de ODBC- en JDBC-stuurprogramma's oproepen voor u vertalen.

Voorbeeld

Vanaf PG11, de CREATE PROCEDURE syntaxis is geïntroduceerd die ondersteuning biedt voor transacties.

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

Die zou kunnen worden aangeroepen met:

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


  1. Tijd bijsnijden vanaf datetime - een vervolg

  2. Hoe vind je alle tabellen met externe sleutels die verwijzen naar bepaalde table.column en die waarden hebben voor die externe sleutels?

  3. Hoe vermeld ik alle kolommen in een tabel?

  4. Hoe u uw MySQL- en MariaDB-back-ups kunt versleutelen