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

Sådan indsætter du data i tabellen ved hjælp af lagrede procedurer i postgresql

PostgreSQL understøttede ikke lagrede procedurer før PG11. Før det kunne du få det samme resultat ved at bruge en funktion. For eksempel:

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;

Du kan så kalde det sådan:

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

De vigtigste begrænsninger for Pg's lagrede funktioner - sammenlignet med ægte lagrede procedurer - er:

  1. manglende evne til at returnere flere resultatsæt
  2. ingen understøttelse af autonome transaktioner (BEGIN, COMMIT og ROLLBACK i en funktion)
  3. ingen understøttelse af SQL-standard CALL-syntaksen, selvom ODBC- og JDBC-driverne vil oversætte opkald for dig.

Eksempel

Startende fra PG11, CREATE PROCEDURE Der introduceres syntaks, som understøtter transaktioner.

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

Som kunne kaldes med:

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


  1. 2 måder at liste tabellerne i en SQLite-database

  2. Er det sikkert at gemme brugernavne og adgangskoder i databasen?

  3. Er SQL Server Unique Key også et indeks?

  4. SYSDATE-funktion i Oracle